https://codeforces.com/contest/1673
기쁘다. 4솔이 잘 돼서 코포 의욕이 마구 생긴다!
다음 목표는 1시간 안에 4솔 가볍게 하기 + 남은 1시간 안에 2E 솔브.
A (00:04)
짝수면 알파벳의 합. 홀수면 한쪽 끝의 알파벳 한 개만 빼고 합 비교하기
28줄부터 보면 된다.
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
|
import sys, math
import heapq
from collections import deque
from bisect import bisect_left, bisect_right
input = sys.stdin.readline
hqp = heapq.heappop
hqs = heapq.heappush
# input
def ip(): return int(input())
def sp(): return str(input().rstrip())
def mip(): return map(int, input().split())
def msp(): return map(str, input().split().rstrip())
def lmip(): return list(map(int, input().split()))
def lmsp(): return list(map(str, input().split()))
############ Main! #############
for ttt in range(ip()):
s = sp()
if len(s) % 2 == 0:
ans = 0
for i in s:
ans += ord(i) - ord('a') + 1
print("Alice", ans)
else:
n = len(s)
now = 0
for i in range(1, n):
now += ord(s[i]) - ord('a') + 1
ans = now - (ord(s[0]) - ord('a') + 1)
now = 0
for i in range(n - 1):
now += ord(s[i]) - ord('a') + 1
ans = max(ans, now - (ord(s[n - 1]) - ord('a') + 1))
if ans < 0:
print("Bob", -ans)
else:
print("Alice", ans)
######## Praise greedev ########
|
cs |
B (00:14)
어떤 알파벳이 두번 이상 등장하지 않는 최대 길이의 문자열을 맨 왼쪽에서 찾으면 된다. 그리고 그 문자열이 반복되는 형태라면 YES.
28줄부터 보면 된다.
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
|
import sys, math
import heapq
from collections import deque
from bisect import bisect_left, bisect_right
input = sys.stdin.readline
hqp = heapq.heappop
hqs = heapq.heappush
# input
def ip(): return int(input())
def sp(): return str(input().rstrip())
def mip(): return map(int, input().split())
def msp(): return map(str, input().split().rstrip())
def lmip(): return list(map(int, input().split()))
def lmsp(): return list(map(str, input().split()))
############ Main! #############
def f(ch):
return ord(ch) - ord('a')
for ttt in range(ip()):
s = sp()
c = [False for _ in range(26)]
t = ""
for i in range(len(s)):
if c[f(s[i])]:
break
t += s[i]
c[f(s[i])] = True
fl = True
for i in range(len(s)):
if s[i] != t[i % len(t)]:
fl = False
print("YES" if fl else "NO")
######## Praise greedev ########
|
cs |
C (00:27)
모르면 안된다. 난 구현에서 실수해서 찾느라 5분은 걸린 것 같다
https://www.acmicpc.net/problem/2293
28줄부터 보면 된다.
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
|
import sys, math
import heapq
from collections import deque
from bisect import bisect_left, bisect_right
input = sys.stdin.readline
hqp = heapq.heappop
hqs = heapq.heappush
# input
def ip(): return int(input())
def sp(): return str(input().rstrip())
def mip(): return map(int, input().split())
def msp(): return map(str, input().split().rstrip())
def lmip(): return list(map(int, input().split()))
def lmsp(): return list(map(str, input().split()))
############ Main! #############
MOD = 10 ** 9 + 7
def isit(s):
for i in range(len(s)):
if s[i] != s[-i - 1]:
return False
return True
p = []
for i in range(1, 40001):
if isit(str(i)):
p.append(i)
dp = [0 for _ in range(40001)]
dp[0] = 1
for i in p:
for j in range(i, 40001):
dp[j] += dp[j - i]
dp[j] %= MOD
for ttt in range(ip()):
n = ip()
print(dp[n] % MOD)
######## Praise greedev ########
|
cs |
D (01:36)
일단, 답이 0인 경우를 찾아보자.
수열 b, c의 공차를 각각 \(d_b, d_c\) 라고 하면,
\(d_c \mod d_b > 0\)인 경우
\((c_1 - b_1) \mod d_b > 0\)인 경우
\(c_n > b_n\) 또는 \(c_1 < b_1\)인 경우
이 경우들을 제외하면 적어도 하나의 답이 존재한다.
이제, 답이 무수히 많을 조건을 찾아보자.
\(c_{n + 1} = b_i\)를 만족하는 \(i\)가 수열 b의 최대 길이 y보다 클 때
\(c_0 = b_i\)를 만족하는 \(i\)가 1보다 작을 때
거의 다 왔다. 특이 케이스를 다 걸러냈으니, 이제 답의 개수를 세면 된다. 수열 a의 공차 \(d_a\)에 대해, \(lcm(d_a, d_b) = d_c\)를 만족하는 \(d_a\)를 찾으면 된다. 공차가 \(d_a\)일 때 가능한 수열 a의 개수는 \((d_c / d_a)^2\)가 된다.
\(lcm(d_a, d_b) = d_c\)이므로, \(d_a\)는 \(d_c\)의 약수여야 한다. \(d_c\)의 약수 중 하나를 \(k\)라고 할 때, \(d_a = k * d_c / d_b\)로 두고 풀면 된다.
37줄부터 보면 된다.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
import sys, math
import heapq
from collections import deque
from bisect import bisect_left, bisect_right
input = sys.stdin.readline
hqp = heapq.heappop
hqs = heapq.heappush
# input
def ip(): return int(input())
def sp(): return str(input().rstrip())
def mip(): return map(int, input().split())
def msp(): return map(str, input().split().rstrip())
def lmip(): return list(map(int, input().split()))
def lmsp(): return list(map(str, input().split()))
def gcd(x, y):
while y:
x, y = y, x % y
return x
def lcm(x, y):
return x * y // gcd(x, y)
############ Main! #############
MOD = 10 ** 9 + 7
def b_n(x):
return b + (x - 1) * d_b
def c_n(x):
return c + (x - 1) * d_c
for ttt in range(ip()):
b, d_b, y = mip()
c, d_c, z = mip()
if d_c % d_b or (c - b) % d_b or c_n(z) > b_n(y) or c < b:
print(0)
continue
i = (c_n(z + 1) - b) // d_b + 1
j = (c_n(0) - b) // d_b + 1
if i > y or j < 1:
print(-1)
continue
factor = []
for i in range(1, round(d_c ** 0.5) + 1):
if d_c % i == 0:
factor.append(i)
for i in range(len(factor)):
if factor[i] * factor[i] == d_c:
continue
factor.append(d_c // factor[i])
ans = 0
for i in factor:
if d_b % i == 0:
d_a = d_c // d_b * i
if lcm(d_a, d_b) != d_c:
continue
ans += ((d_c // d_a) ** 2) % MOD
ans %= MOD
print(ans % MOD)
######## Praise greedev ########
|
cs |
딥2 AB가 요즘들어 좋지 않은 문제들이 많았는데, 이번 라운드는 정말 좋은 문제가 나왔다.
'코드포스' 카테고리의 다른 글
Codeforces Round #796 (Div. 2) (0) | 2022.06.04 |
---|---|
Codeforces Round #788 (Div. 2) (2) | 2022.05.07 |
Educational Codeforces Round #127 (Div.2) (0) | 2022.04.23 |
CodeForces Round #782 (Div.2) (0) | 2022.04.18 |
Codeforces Round #781 (Div.2) (4) | 2022.04.09 |