AtCoder Beginner Contest 173
はい。
https://atcoder.jp/contests/abc173
A - Payment
#include<bits/stdc++.h> using namespace std; int main(){ int n,ans=0; scanf("%d",&n); ans=1000-(n%1000); if (ans==1000) { printf("0\n"); } else { printf("%d\n",ans); } return 0; })
久しぶりでなんがぐだぐだ考えてぐだぐだしたコードになった。ちょっとした事情によりC++使いました。よくわかりません。
B - Judge Status Summary
#include<bits/stdc++.h> using namespace std; int main(){ int n; int ans[4]={0}; char s[4]; scanf("%d",&n); for (int i=0;i<n;i++) { scanf("%s",s); if (s[0]=='A') ans[0]+=1; else if (s[0]=='W') ans[1]+=1; else if (s[0]=='T') ans[2]+=1; else ans[3]+=1; } printf("AC x %d\n",ans[0]); printf("WA x %d\n",ans[1]); printf("TLE x %d\n",ans[2]); printf("RE x %d\n",ans[3]); return 0; }
強引に解決。先頭一文字だけ見ればそれぞれ違います。使用言語によって文字列の先頭一文字だけ調べることのやりやすさが違うかもしれない。事情によりC++。
C - H and V
PyPy3
h,w,k=map(int,input().split()) d=[input() for i in range(h)] ans=0 chk=2**(h+w) for i in range(chk): a="000000000000"+bin(i)[2:] a=a[::-1] cnt=0 for j in range(h*w): y=j//w x=j%w if a[y]=="0" and a[h+x]=="0" and d[y][x]=="#": cnt+=1 if cnt==k: ans+=1 print(ans)
bit全探索かな?雑な書き方ですけど最も自分が慣れている書き方で。とりあえずAC出来るかを先に試したかったのでC++使いませんでした。
縦の列、横の行のそれぞれを塗りつぶすかどうか全部試します。塗りつぶし方を全部試すのでそれぞれの塗り方の結果による黒マスの個数も調べることが出来ます。
黒マスがちょうどK個になっているものをカウントすると解になるはずです。多分。
D - Chat in a Circle
PyPy3
n=int(input()) a=[int(i) for i in input().split()] a.sort() ans=0 ans+=max(a) a.pop() n-=2 while n: if n>=2: ans+=a.pop()*2 n-=2 else: ans+=a.pop() n-=1 print(ans)
そもそもこの解法が合っているかわからないです。Aiは必ず大きいほうから使います。数手先の未来でより最もフレンドリーさの高い効率のいい人になってもらう目的です。
証明はないのでそもそも解法があっているかわからないですが、最も大きい値は1度だけ得点、以降は左右挟むように置いて2度まで得点できる。最後は人数の都合で1度得点で終わりになる人もいるかもしれないです。証明はありません。