AtCoder ABC 179 Python (A~E)
총괄
A, B만 풀었습니다.
최근 성능이 계속 떨어지고 있습니다.
문제
A. Plural Form
답변
S = input()
if S[-1] == 's':
answer = S + 'es'
else:
answer = S + 's'
print(answer)
문제문대로 씁니다.
B. Go to Jail
답변
N = int(input())
D = [tuple(map(int, input().split())) for _ in range(N)]
answer = 'No'
count = 0
for i in range(N):
if D[i][0] != D[i][1]:
count = 0
else:
count += 1
if count == 3:
answer = 'Yes'
break
print(answer)
얼룩을 판정하고 count
가 3
에 도달하면 Yes
를 반환합니다.
C. A x B + C
답변
N = int(input())
answer = 0
for a in range(1, N):
answer += (N-1) // a
print(answer)
제약을 고려하면 for 루프는 한 번만 돌릴 수 있을 것 같지 않습니다.A * B + C = N
를 변형하여 A * B = N - C
라고 하면 A * B
의 조합의 수를 세는 문제라고 부릅니다.
D. Leaping Tak
답변
MOD = 998244353
N, K = map(int, input().split()) #Nはマス目の数、Kは区間の数(Kは10以下)
kukan = [tuple(map(int, input().split())) for _ in range(K)]
dp = [0] * (N+1)
dp[1] = 1
sumdp = [0] * (N+1)
sumdp[1] = 1
for i in range(2, N+1):
for l, r in kukan:
li = max(i - l, 0)
ri = max(i - r - 1, 0)
dp[i] += sumdp[li] - sumdp[ri]
dp[i] %= MOD
sumdp[i] = sumdp[i-1] + dp[i]
print(dp[N])
보통 dp
를 취하면 사이에 맞지 않으므로 dp
와 누적 합 sumdp
를 사용합니다.
E. Sequence Sum
답변
N, X, M = map(int, input().split())
count_memo = [-1] * 10**6 # 回数のメモ
num_memo = [0] # Aのメモ。1インデックスるにする.
a = X
count = 1
count_memo[a] = count
num_memo.append(a)
for i in range(1, N):
a = a**2 % M
if count_memo[a] == -1:
count += 1
count_memo[a] = count
num_memo.append(a)
else:
break
if count == N: # サイクルに入る前に終わった場合は全部合計
answer = sum(num_memo)
else:
# 周期に入るまでの回数と合計
count_before_cycle = count_memo[a] - 1
sum_before_cycle = sum(num_memo[:count_before_cycle+1])
# 1周期の数と合計
count_cycle = count - count_before_cycle
sum_cycle = sum(num_memo[count_before_cycle+1:])
# 残りのサイクルの数と合計
cycle_count = (N - count) // count_cycle
sum_after_cycle = sum_cycle * cycle_count
# あまりの数と合計
remain_count = (N - count) % count_cycle
sum_remain = sum(num_memo[count_before_cycle+1:count_before_cycle+1 + remain_count])
answer = sum_before_cycle + sum_cycle + sum_after_cycle + sum_remain
print(answer)
A
는 어딘가에 사이클에 들어갑니다.
그러므로
1. 사이클에 들어가기 전
2. 사이클
3. 사이클 반복
4. 사이클의 중간에 끝나는 여분의 횟수
의 4가지로 나누어 더해 줍니다.
Reference
이 문제에 관하여(AtCoder ABC 179 Python (A~E)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/K_SIO/items/b36876f6fd75dafae7b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
A. Plural Form
답변
S = input()
if S[-1] == 's':
answer = S + 'es'
else:
answer = S + 's'
print(answer)
문제문대로 씁니다.
B. Go to Jail
답변
N = int(input())
D = [tuple(map(int, input().split())) for _ in range(N)]
answer = 'No'
count = 0
for i in range(N):
if D[i][0] != D[i][1]:
count = 0
else:
count += 1
if count == 3:
answer = 'Yes'
break
print(answer)
얼룩을 판정하고 count
가 3
에 도달하면 Yes
를 반환합니다.
C. A x B + C
답변
N = int(input())
answer = 0
for a in range(1, N):
answer += (N-1) // a
print(answer)
제약을 고려하면 for 루프는 한 번만 돌릴 수 있을 것 같지 않습니다.A * B + C = N
를 변형하여 A * B = N - C
라고 하면 A * B
의 조합의 수를 세는 문제라고 부릅니다.
D. Leaping Tak
답변
MOD = 998244353
N, K = map(int, input().split()) #Nはマス目の数、Kは区間の数(Kは10以下)
kukan = [tuple(map(int, input().split())) for _ in range(K)]
dp = [0] * (N+1)
dp[1] = 1
sumdp = [0] * (N+1)
sumdp[1] = 1
for i in range(2, N+1):
for l, r in kukan:
li = max(i - l, 0)
ri = max(i - r - 1, 0)
dp[i] += sumdp[li] - sumdp[ri]
dp[i] %= MOD
sumdp[i] = sumdp[i-1] + dp[i]
print(dp[N])
보통 dp
를 취하면 사이에 맞지 않으므로 dp
와 누적 합 sumdp
를 사용합니다.
E. Sequence Sum
답변
N, X, M = map(int, input().split())
count_memo = [-1] * 10**6 # 回数のメモ
num_memo = [0] # Aのメモ。1インデックスるにする.
a = X
count = 1
count_memo[a] = count
num_memo.append(a)
for i in range(1, N):
a = a**2 % M
if count_memo[a] == -1:
count += 1
count_memo[a] = count
num_memo.append(a)
else:
break
if count == N: # サイクルに入る前に終わった場合は全部合計
answer = sum(num_memo)
else:
# 周期に入るまでの回数と合計
count_before_cycle = count_memo[a] - 1
sum_before_cycle = sum(num_memo[:count_before_cycle+1])
# 1周期の数と合計
count_cycle = count - count_before_cycle
sum_cycle = sum(num_memo[count_before_cycle+1:])
# 残りのサイクルの数と合計
cycle_count = (N - count) // count_cycle
sum_after_cycle = sum_cycle * cycle_count
# あまりの数と合計
remain_count = (N - count) % count_cycle
sum_remain = sum(num_memo[count_before_cycle+1:count_before_cycle+1 + remain_count])
answer = sum_before_cycle + sum_cycle + sum_after_cycle + sum_remain
print(answer)
A
는 어딘가에 사이클에 들어갑니다.
그러므로
1. 사이클에 들어가기 전
2. 사이클
3. 사이클 반복
4. 사이클의 중간에 끝나는 여분의 횟수
의 4가지로 나누어 더해 줍니다.
Reference
이 문제에 관하여(AtCoder ABC 179 Python (A~E)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/K_SIO/items/b36876f6fd75dafae7b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
S = input()
if S[-1] == 's':
answer = S + 'es'
else:
answer = S + 's'
print(answer)
답변
N = int(input())
D = [tuple(map(int, input().split())) for _ in range(N)]
answer = 'No'
count = 0
for i in range(N):
if D[i][0] != D[i][1]:
count = 0
else:
count += 1
if count == 3:
answer = 'Yes'
break
print(answer)
얼룩을 판정하고
count
가 3
에 도달하면 Yes
를 반환합니다.C. A x B + C
답변
N = int(input())
answer = 0
for a in range(1, N):
answer += (N-1) // a
print(answer)
제약을 고려하면 for 루프는 한 번만 돌릴 수 있을 것 같지 않습니다.A * B + C = N
를 변형하여 A * B = N - C
라고 하면 A * B
의 조합의 수를 세는 문제라고 부릅니다.
D. Leaping Tak
답변
MOD = 998244353
N, K = map(int, input().split()) #Nはマス目の数、Kは区間の数(Kは10以下)
kukan = [tuple(map(int, input().split())) for _ in range(K)]
dp = [0] * (N+1)
dp[1] = 1
sumdp = [0] * (N+1)
sumdp[1] = 1
for i in range(2, N+1):
for l, r in kukan:
li = max(i - l, 0)
ri = max(i - r - 1, 0)
dp[i] += sumdp[li] - sumdp[ri]
dp[i] %= MOD
sumdp[i] = sumdp[i-1] + dp[i]
print(dp[N])
보통 dp
를 취하면 사이에 맞지 않으므로 dp
와 누적 합 sumdp
를 사용합니다.
E. Sequence Sum
답변
N, X, M = map(int, input().split())
count_memo = [-1] * 10**6 # 回数のメモ
num_memo = [0] # Aのメモ。1インデックスるにする.
a = X
count = 1
count_memo[a] = count
num_memo.append(a)
for i in range(1, N):
a = a**2 % M
if count_memo[a] == -1:
count += 1
count_memo[a] = count
num_memo.append(a)
else:
break
if count == N: # サイクルに入る前に終わった場合は全部合計
answer = sum(num_memo)
else:
# 周期に入るまでの回数と合計
count_before_cycle = count_memo[a] - 1
sum_before_cycle = sum(num_memo[:count_before_cycle+1])
# 1周期の数と合計
count_cycle = count - count_before_cycle
sum_cycle = sum(num_memo[count_before_cycle+1:])
# 残りのサイクルの数と合計
cycle_count = (N - count) // count_cycle
sum_after_cycle = sum_cycle * cycle_count
# あまりの数と合計
remain_count = (N - count) % count_cycle
sum_remain = sum(num_memo[count_before_cycle+1:count_before_cycle+1 + remain_count])
answer = sum_before_cycle + sum_cycle + sum_after_cycle + sum_remain
print(answer)
A
는 어딘가에 사이클에 들어갑니다.
그러므로
1. 사이클에 들어가기 전
2. 사이클
3. 사이클 반복
4. 사이클의 중간에 끝나는 여분의 횟수
의 4가지로 나누어 더해 줍니다.
Reference
이 문제에 관하여(AtCoder ABC 179 Python (A~E)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/K_SIO/items/b36876f6fd75dafae7b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
N = int(input())
answer = 0
for a in range(1, N):
answer += (N-1) // a
print(answer)
답변
MOD = 998244353
N, K = map(int, input().split()) #Nはマス目の数、Kは区間の数(Kは10以下)
kukan = [tuple(map(int, input().split())) for _ in range(K)]
dp = [0] * (N+1)
dp[1] = 1
sumdp = [0] * (N+1)
sumdp[1] = 1
for i in range(2, N+1):
for l, r in kukan:
li = max(i - l, 0)
ri = max(i - r - 1, 0)
dp[i] += sumdp[li] - sumdp[ri]
dp[i] %= MOD
sumdp[i] = sumdp[i-1] + dp[i]
print(dp[N])
보통
dp
를 취하면 사이에 맞지 않으므로 dp
와 누적 합 sumdp
를 사용합니다.E. Sequence Sum
답변
N, X, M = map(int, input().split())
count_memo = [-1] * 10**6 # 回数のメモ
num_memo = [0] # Aのメモ。1インデックスるにする.
a = X
count = 1
count_memo[a] = count
num_memo.append(a)
for i in range(1, N):
a = a**2 % M
if count_memo[a] == -1:
count += 1
count_memo[a] = count
num_memo.append(a)
else:
break
if count == N: # サイクルに入る前に終わった場合は全部合計
answer = sum(num_memo)
else:
# 周期に入るまでの回数と合計
count_before_cycle = count_memo[a] - 1
sum_before_cycle = sum(num_memo[:count_before_cycle+1])
# 1周期の数と合計
count_cycle = count - count_before_cycle
sum_cycle = sum(num_memo[count_before_cycle+1:])
# 残りのサイクルの数と合計
cycle_count = (N - count) // count_cycle
sum_after_cycle = sum_cycle * cycle_count
# あまりの数と合計
remain_count = (N - count) % count_cycle
sum_remain = sum(num_memo[count_before_cycle+1:count_before_cycle+1 + remain_count])
answer = sum_before_cycle + sum_cycle + sum_after_cycle + sum_remain
print(answer)
A
는 어딘가에 사이클에 들어갑니다.
그러므로
1. 사이클에 들어가기 전
2. 사이클
3. 사이클 반복
4. 사이클의 중간에 끝나는 여분의 횟수
의 4가지로 나누어 더해 줍니다.
Reference
이 문제에 관하여(AtCoder ABC 179 Python (A~E)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/K_SIO/items/b36876f6fd75dafae7b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
N, X, M = map(int, input().split())
count_memo = [-1] * 10**6 # 回数のメモ
num_memo = [0] # Aのメモ。1インデックスるにする.
a = X
count = 1
count_memo[a] = count
num_memo.append(a)
for i in range(1, N):
a = a**2 % M
if count_memo[a] == -1:
count += 1
count_memo[a] = count
num_memo.append(a)
else:
break
if count == N: # サイクルに入る前に終わった場合は全部合計
answer = sum(num_memo)
else:
# 周期に入るまでの回数と合計
count_before_cycle = count_memo[a] - 1
sum_before_cycle = sum(num_memo[:count_before_cycle+1])
# 1周期の数と合計
count_cycle = count - count_before_cycle
sum_cycle = sum(num_memo[count_before_cycle+1:])
# 残りのサイクルの数と合計
cycle_count = (N - count) // count_cycle
sum_after_cycle = sum_cycle * cycle_count
# あまりの数と合計
remain_count = (N - count) % count_cycle
sum_remain = sum(num_memo[count_before_cycle+1:count_before_cycle+1 + remain_count])
answer = sum_before_cycle + sum_cycle + sum_after_cycle + sum_remain
print(answer)
Reference
이 문제에 관하여(AtCoder ABC 179 Python (A~E)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/K_SIO/items/b36876f6fd75dafae7b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)