キャディプログラミングコンテスト2021


f:id:penyooo:20200112235130p:plain


  • 独学者です。( 2019 / 9 ~ )
  • AtCoder の問題に Python で取り組んでいます。
  • ABC で4問目(茶か緑)まで解けることを目標にしています。

完全に独学なのでコードは酷いと思います。

AtCoder やってる方、お気軽にコメントください。





結果



f:id:penyooo:20210227231322p:plain

今回は全然ダメだったなぁという感想だったのだけど、

何でか現状維持は出来たらしい。

考え方わからんけど強引に答えだけ出したって感じだった。





問題と解答と勉強


atcoder.jp



提出したコード
A, B = map(int, input().split())
 
print((A - B) / A * 100)









atcoder.jp



提出したコード
N = int(input())
ans = 1000000001
 
for _ in range(N):
    A, P, X = map(int, input().split())
    if X - A > 0 and P < ans:
        ans = P
        
if ans < 1000000001:
    print(ans)
else:
    print(-1)



何かイマイチ感が否めない。

と思ってたんだけど。

正解
n=int(input())
m=10**9+1
for i in range(n):
    a,p,x=map(int,input().split())
    if x-a>0 and p<m:m=p
print(-1 if m>10**9 else m)



プロが全く同じの出してたから良いっぽい。

だいぶ同じだからちょっと嬉しい。







atcoder.jp



提出したコード
import math
 
N = int(input())
ok = []
 
for i in range(2,100001):
    for j in range(2,35):
        if i**j <= N:
            ok.append(i**j)
            
print(N - len(set(ok)))



これヤベェぞ。

提出した全ての解答の中で一番ダサい自信がある。

何か工夫して数える回数減らそうとすると不正解になってさ。

わかんないから全部数えたよ。

だって10000000000まで数えても時間、間に合うんだもの。

若干出題ミスっぽいよね、間に合っちゃダメだよね多分。



と思ったんだけどさ。

正解
n=int(input())
i=2
s=set()
while i**2<=n:
  m=2
  while i**m<=n:
    s.add(i**m)
    m+=1
  i+=1
print(n-len(s))



これで正解みたい、同じじゃん。

良いのか・・・これで。

何か今回どうも腑に落ちない。







atcoder.jp



考え途中
K = int(input())
S = list(input())
T = list(input())
card = [K]*9

TAKA = []
AO = []

for i in range(1, 10):
    card[i-1] -= S.count(str(i))
    card[i-1] -= T.count(str(i))
    S[4] = str(i)
    T[4] = str(i)
    taka = 0
    ao = 0
    for j in range(1, 10):
        taka += i * 10**S.count(str(i))
        ao += i * 10**T.count(str(i))
    TAKA.append(taka)
    AO.append(ao)

total = sum(card)*(sum(card)-1)
count = 0
for n, i in enumerate(TAKA):
    for m, j in enumerate(AO):
        if i > j:
            count += card[n]*card[m]

print(count/total)



まだそれっぽく、なって来た、か??って段階。

例題1だけは正解になる。

で、タイムアップ!



正解
k=int(input())
s=list(map(int,list(input()[:4])))
t=list(map(int,list(input()[:4])))
ans=0
def point(x):
    p=0
    for i in range(1,10):
        p+=i*10**(x.count(i))
    return p
for i in range(1,10):
    for j in range(1,10):
        if point([*s,i])>point([*t,j]):
            imai=k-s.count(i)-t.count(i)
            jmai=k-s.count(j)-t.count(j)
            if imai-int(i==j)>0 and jmai>0:
                ans+=(imai/(9*k-8))*((jmai-int(i==j))/(9*k-9))
print(ans)



あぁ、これも近づいてたんだなぁ。

間に合えば到達したかもしれん。

今回はそういうシリーズだったのかな。







atcoder.jp



atcoder.jp



毎回思うけど5,6問目ってビギナーに解かせる気ないよね。