2番目の物語...


漠然とした壮大なタイトルが書かれていましたが、
自分で脅したいのか~!Reserパンダみたいに鼻が死んでる~!トットちゃんの姿を見せてくれます😎
白駿
t = int(input())
for _ in range(t):
   m,n,x,y = map(int, input().split())
   x -= 1
   y -= 1
   k = x
   while k < n*m:
       if k%n == y:
           print(k+1)
           break
       k += m
   else:
       print(-1)
[🗝 key point]
i*M+x(i>=0)을 이용하면 됨.
이게 무슨 뜻이냐~면!
예를 들어 M=5, N=7, x=3, y=2이다. 
이때, 23:<3,2>를 찾고 싶다면 찾는 해의 값 = i*5+3을 이용해서 구할 수 있다는 뜻
시간복잡도 == O(N)
白駿1748
n = int(input())
ans = 0
start = 1
length = 1
while start <= n:
  end = start*10-1
  if end>n:
      end = n
  ans += (end-start+1)*length
  start *= 10
  length += 1
print(ans)
[🗝 key point]
1-9까지는 1자리 수이고,
10-99까지는 2자리 수이다.
이를 이용해서 N이 356이라고 가정했을 때, 
(9-1+1)x1 + (99-10+1)x2 + (356-100+1)x3 으로 정답을 도출해 낼 수 있는 것이다.
이것을 수식화 한 것이 위의 코드에 있는 (end-start+1)*length이다.
標準9095
この問題にはいろいろな解法がある(?)sysモジュールを使わなくても解ける方法を2つ書きます.(絶対面倒くさい、林が厚い…)
#1メソッド
n = int(input())

def sum(n):
  if n == 1:
      return(1)
  elif n == 2:
      return(2)
  elif n == 3:
      return(4)
  else:
      return sum(n-1) + sum(n-2) + sum(n-3) 
      
for i in range(n):
  a = int(input())
  print(sum(a))
[🗝 key point]
이 코드에 사용한 점화식은 f(n) = f(n+1) + f(n+2) + f(n+3), (n>3)
#2つ目の方法
n = int(input()) 
input_list=[]
for i in range(n):
  input_list.append(int(input()))
dp=[1,2,4]

for i in range(3,max(input_list)):
  dp.append(dp[i-1]+dp[i-2]+dp[i-3])

for i in input_list:
  print(dp[i-1])
[🗝 key point]
  이 코드에 사용한 점화식은 dp[n] = dp[n-1]+dp[n-2]+dp[n-3]
  
素晴らしい!💨