2月5日のAtCoder Beginner Contest 238のA、B、C問題の解説です。
実行速度の点から、pypyで実行しています。
#A - Exponential or Quadratic
特に考えずに、問題通りに解く
n=int(input())
if 2**n>n**2:
print("Yes")
else:
print("No")
#B - Pizza
angleにそれぞれの角度を格納する。
n回目にangle(n)度を格納すると、
それぞれの角度は、
0度
angle(n)=angle(n)
angle(n-1)=(angle(n)+angle(n-1))%360
angle(n-2)=(angle(n)+angle(n-1)+angle(n-2))%360
・
・
angle(1)=(angle(n)+・・・+angle(1))%360
360度
となる。
その後これらの角度をソートし、角度の差が一番大きいものが答えである。
A=[]
s=[]
angle=0
N=int(input())
A=list(map(int,input().split()))
for i in range(len(A)):
angle=angle+A[-(i+1)]
angle=angle%360
s.append(angle)
s.append(0)
s.append(360)
s=sorted(s)
max=0
for i in range(len(s)-1):
if(max<(s[i+1]-s[i])):
max=s[i+1]-s[i]
print(max)
#C - digitnum
それぞれの整数の時、
n<1の時
整数1~9 1~9
n>=1の時、
整数10~99 1~90
整数100~999 1~900
より、
整数10^n~10^(n+1)-1 9*10^n (1)
例えば、値が123 の時、
整数1~9
整数10~99の桁数を(1)の式を用いて加算する。
その後、
100~123の部分を加算する。
N=int(input())
MOD =998244353
sum=0
m=len(str(N))
for k in range(0,len(str(N))-1):
i=k+1
if i==1:
p=9
else:
p=10**(i-1)*9
sum=(sum+(1+p)*p//2)%MOD
last=(N-10**(m-1))+1
sum=sum+((last+1)*last)//2
sum=sum%MOD
print(sum)
#さいごに
よければTwitterのフォローもお願いします。
twitter(https://twitter.com/NLP_tk)