Summer Festival Contest 2018 (Division 2)
Summer Festival Contest 2018 (Division 2) - AtCoder
A - 夏祭り会議 (Summer Festival Meeting)
- 2番目以降3数の和はゼロに保たれる x[k] + y[k] + z[k] = 0 for k >= 2
- この式を使うと、if K>=2: x[k+2] = 0 ==> x[k] == 0が成立することが示せる。
- 制約よりi=1は解にならない
X,Y,Z = map(int,input().split()) x2=Y-Z y2=Z-X z2=X-Y if x2*y2*z2==0: print(2) else: x3=y2-z2 y3=z2-x2 z3=x2-y2 if x3*y3*z3==0: print(3) else: print(-1)
1 2 3
3
B - 太鼓の名人 (Taiko Expert)
- 最後のDの位置xと最初のKの位置yを比べればよい
- x>yならば0でx<yのときxとyの間にある?の数をzとするとz=y-x-1
- zのなかにDが何個あるかで場合分け出来るのでans = z+1
- 結局ans = y-x
L = int(input()) S=input() x = -1 y = L for i in range(L): if S[i] == "D": x = i if S[i] == "K" and y == L: y = i if x > y: ans = 0 else: ans = y-x print(ans)
C - 整数占い (Uranai Integer)
- f(x,y) = 2 + xy + 2x + 2yが結合律を満たす
- 同様に交換法則も満たす
- よって最終結果は順序によらないので1通り計算すればよい
- fにmodをつけても同じことがいえる
import Control.Applicative main = do getLine a <- map read . words <$> getLine print $ solve a modulo = 10^9 + 7 :: Integer solve :: [Integer] -> Integer solve = foldl1 (\x y->mod (2+x*y+2*x+2*y) modulo)
E - 石積み (Pyramid Piling)
- 実験する!
- 各次元について題意を満たす最小のsの組を全探索で求めてみる
- 実験コード↓
S=55 a = [i for i in range(1,S+1)] print(a) b=[] b.append(a) N=15 for i in range(1,N): x = 0 b.append([0 for _ in range(S)]) for j in range(S): x += b[i-1][j] b[i][j] = x #print(b[i]) ans=[] left=[] right=[] for k in range(N-1): flag = False for i in range(S): if flag: break for j in range(S): if flag: break if b[k][i] == b[k+1][j] and i*j !=0: print(k+1,i+1,j+1,b[k][i]) ans.append(b[k][i]) left.append(i+1) right.append(j+1) flag = True print(left) print(right)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55] 1 3 2 3 2 4 3 10 3 5 4 35 4 6 5 126 5 7 6 462 6 8 7 1716 7 9 8 6435 8 10 9 24310 9 11 10 92378 10 12 11 352716 11 13 12 1352078 12 14 13 5200300 13 15 14 20058300 14 16 15 77558760 [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
これによりたぶん次のコードで通るであろうことがわかる。
N=int(input()) print(N,N+1)