AtCoder Beginner Contest 100
はい。
https://atcoder.jp/contests/abc100
A - Happy Birthday!
#include<bits/stdc++.h> using namespace std; int main(){ int a,b; scanf("%d %d",&a,&b); printf("%s\n",(a<9 && b<9)?"Yay!":":("); return 0; }
多分どちらかが8より大きいと連続する2切れを取ってしまうと思う。なのでそれを判定条件にすれば大丈夫だと思う。
B - Ringo's Favorite Numbers
#include<bits/stdc++.h> using namespace std; int main(){ int d,n; scanf("%d %d",&d,&n); if (n==100) n++; if (d==0) { printf("%d\n",n); } else if (d==1) { printf("%d\n",n*100); } else { printf("%d\n",n*10000); } return 0; }
入出力例の通りに1,2,3...とかで適当に数える。但しn=100の時だけ少し例外になる。
C - *3 or /2
C++14
#include<bits/stdc++.h> using namespace std; int main(){ int n,ans=0,tmp=0; scanf("%d",&n); vector<long long> a(n); for (auto&e:a) scanf("%d",&e); for (int i=0;i<n;i++) { tmp=0; long long k=a[i]; for(;;) { if (k>=1 && k%2==0) { k/=2; tmp++; } else { break; } } ans+=tmp; } printf("%d\n",ans); return 0; }
先に解説を見てしまったけどもその前に小さいケースで色々確認して自分で気づくべきだった。。掛ける3は何がどうなっても割る2が出来なかったものが出来るようにはならないので、数列全体で割る2が出来るものを1つだけするのを繰り返すことになる。掛ける3はシミュする意味はないのでひたすら割る2が出来る回数だけ調べてその和が解になる。
D - Patisserie ABC
Python3
n,m=map(int,input().split()) l000=[] l001=[] l010=[] l100=[] for i in range(n): x,y,z=map(int,input().split()) l000.append((x+y+z,x,y,z)) l001.append((x+y-z,x,y,z)) l010.append((x-y+z,x,y,z)) l100.append((-x+y+z,x,y,z)) l000.sort() l001.sort() l010.sort() l100.sort() dx=[0]*8 dy=[0]*8 dz=[0]*8 for i in range(m): dx[0]+=l000[i][1] dy[0]+=l000[i][2] dz[0]+=l000[i][3] dx[1]+=l000[-i-1][1] dy[1]+=l000[-i-1][2] dz[1]+=l000[-i-1][3] dx[2]+=l001[i][1] dy[2]+=l001[i][2] dz[2]+=l001[i][3] dx[3]+=l001[-i-1][1] dy[3]+=l001[-i-1][2] dz[3]+=l001[-i-1][3] dx[4]+=l010[i][1] dy[4]+=l010[i][2] dz[4]+=l010[i][3] dx[5]+=l010[-i-1][1] dy[5]+=l010[-i-1][2] dz[5]+=l010[-i-1][3] dx[6]+=l100[i][1] dy[6]+=l100[i][2] dz[6]+=l100[i][3] dx[7]+=l100[-i-1][1] dy[7]+=l100[-i-1][2] dz[7]+=l100[-i-1][3] ans=abs(dx[-1])+abs(dy[-1])+abs(dz[-1]) for i in range(7): ans=max(ans,abs(dx[i])+abs(dy[i])+abs(dz[i])) print(ans)
x,y,zのそれぞれを正|負でなんとなく最大の値になるようにな8通りを試しました。なぜかACになりました。解説を読みましょう。