A - 差の平均

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

要素数 n の正の整数の列 a_n について、隣り合う項同士の差の平均、つまり、a_{i+1} - a_{i} (1 \leq i \leq n - 1) の平均値を求めてください。


入力

入力は以下の形式で与えられる。

n
a_1 a_2 a_3 ... a_n
  • 1 行目には、数列の要素数を表す整数 n (2 \leq n \leq 100) が与えられる。
  • 2 行目には、数列の各項 a_i (1 \leq a_i \leq 1{,}000{,}000{,}000) が与えられる。

出力

隣り合う項同士の差の平均値を 1 行で出力せよ。

絶対誤差が 0.001 以下ならば正解とみなされる。

最後は改行し、余計な文字、空行を含まないこと。


入力例1

4
4 3 2 1

出力例1

-1

隣り合う項同士の差の平均は ((3 - 4) + (2 - 3) + (1 - 2)) / 3 となる。


入力例2

4
1 2 3 5

出力例2

1.333

隣り合う項同士の差の平均は (1 + 1 + 2) / 3 となる。


入力例3

4
1000000000 1000000000 1000000000 1000000000

出力例3

0

入力例4

4
1000000000 324219581 581395481 2319

出力例4

-333332560.333333313

絶対誤差が 0.001 以下になるように出力すること。

B - チーム作り

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

CODE FESTIVAL 2014 には 200 人の参加者がおり、1 から 20 までの計 20 チームに分かれてリレー(物理)を行います。

参加者は本戦の順位によって、以下のような手順でチームが決まります。

  • 1 ~ 20 位までの人は、順に 1 ~ 20 までのチームに入る
  • 21 ~ 40 位までの人は、逆順に 1 ~ 20 までのチームに入る
  • 41 ~ 60 位までの人は、順に1 ~ 20 までのチームに入る
  • ...

さて、ある参加者の本戦での順位が与えられるので、その参加者がどのチームになるかを求めてください。


入力

入力は以下の形式で与えられる。

n
  • 1 行目には、ある参加者の本戦での順位を表す整数 n (1 \leq n \leq 200) が与えられる。

出力

与えられた順位の参加者が配属されるチームの番号を 1 行で出力せよ。

最後は改行し、余計な文字、空行を含まないこと。


入力例1

1

出力例1

1

入力例2

21

出力例2

20
C - 身体バランス

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

C さんは斜めがけの鞄を愛用しています。
しかし、片方の肩にばかり鞄をかけていると、身体が歪んでしまうと言われたため、両方の肩に同じ時間だけ鞄をかけるように心がけることにしています。

C さんの住んでいる国には、n 個の街と、街同士をつなぐ m 個の道があります。
どの 2 つの異なる道に関しても、結んでいる 2 つの街同士が一致することはありません。

C さんはある日、街 s から街 t へと移動する必要が出てきました。
そこで、途中の街 u で一度だけ鞄を持ち替えて、左右の肩に鞄をかける時間を同じにしたいと考えています。
しかし、C さんは最強最速なので、街 s から街 u、街 u から街 t への移動は最短経路を通ります。

このような街 u の選び方があるかどうかを求めてください。


入力

入力は以下の形式で与えられる。

n m
s t
x_1 y_1 d_1
x_2 y_2 d_2
...
x_m y_m d_m
  • 1 行目には、街の数を表す整数 n (3 \leq n \leq 1{,}000) と、道の数を表す整数 m (1 \leq m \leq min(n(n-1)/2, 10^4)) が与えられる。
  • 街にはそれぞれ 1 から n までの番号が振られている。
  • 2 行目には、出発する街の番号を表す整数 s (1 \leq s \leq n) と、目的地の街の番号を表す整数 t (1 \leq t \leq n) が与えられる。
  • 続く m 行には、各道の情報が与えられる。
  • x_i, y_i (1 \leq x_i, y_i \leq n かつ x_i \neq y_i) と d_i (1 \leq d_i \leq 1{,}000) は、i 番目の道によって街 x_i と街 y_i の間を移動するのに d_i の時間がかかることを意味する。
  • s から街 t へは到達可能であることが保証される。

出力

答えとなる街 u が存在する場合は、その街の番号を 1 行で出力せよ。

答えの候補が複数ある場合は、どれを出力してもよい。

また、そのような街 u が無い場合は -1 を出力せよ。

最後は改行し、余計な文字、空行を含まないこと。


入力例1

3 3
1 2
1 3 3
3 2 3
1 2 1

出力例1

3

1 から街 2 へ行く際に、街 3 を経由した場合、1 → 33 の時間がかかり、3 → 23 の時間がかかるため、街 3 を経由して、そこで鞄を持ち替えればよい。


入力例2

4 4
1 3
1 2 2
1 4 3
2 4 3
3 4 5

出力例2

-1

1 → 2 → 4 → 3 という順に移動すれば、街 4 で鞄を持ち替えることで左右にかかる負担を同じにすることができるが、C さんは街 1 から街 4 まで最短経路を通るので、このような移動のしかたはできない。

D - 枕決め

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

CODE FESTIVAL 2014 の参加者のうち、n 人の人がホテルに宿泊しようとしています。

ホテルには m 個の部屋があり、部屋 i には高さが a_i の枕が置いてあります。
ホテルの部屋はあまり広くないため、1 つの部屋には高々 1 人しか宿泊することができません。
参加者はそれぞれ枕の高さに対して好みがあり、i 番目の参加者は x_i 以上 y_i 以下の高さの枕を好んでいます。

できるだけ多くの参加者が好みの枕を使うことができるようにホテルの部屋を割り当てたときに、好みの枕を使うことができる人数を求めてください。


入力

入力は以下の形式で与えられる。

n m
x_1 y_1
...
x_n y_n
a_1
...
a_m
  • 1 行目には、宿泊する人数を表す整数 n (1 \leq n \leq 100{,}000) と、ホテルの部屋の数を表す整数 m (1 \leq m \leq 100{,}000) が与えられる。
  • 続く n 行には、各参加者の枕の高さに対する好みの範囲が与えられる。
  • x_i, y_i (1 \leq x_i \leq y_i \leq 100{,}000) は、i 番目の宿泊者が x_i 以上 y_i 以下の高さの枕を好むことを意味する。
  • 続く m 行には、ホテルの各部屋にある枕の高さが与えられる。
  • a_i (1 \leq a_i \leq 100{,}000) は、i 番目の部屋にある枕の高さが a_i であることを意味する。

出力

できるだけ多くの参加者が好みの枕を使えるようにホテルの部屋を割り当てたときに、好みの枕を使うことができる人数を 1 行で出力せよ。

最後は改行し、余計な文字、空行を含まないこと。


入力例1

3 3
1 2
2 3
3 4
1
2
3

出力例1

3

入力例2

3 3
1 2
2 3
3 4
2
4
5

出力例2

2

入力例3

3 4
1 4
2 3
5 5
2
4
5
6

出力例3

3