1
0

More than 1 year has passed since last update.

AtCoder Beginner Contest 238(A~C問題)

Last updated at Posted at 2022-02-06

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)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0