AtCoder Regular Contest #002 #A
・問題リンク うるう年
・コメント
初参加のAtCoderでしたが、一問しかACすることができませんでした(笑)
しかしながら、敷居が高いものと思っていたので今回の参加によってすこし身近なものに感じるようになれたと思います。
A問題では何度か解いたことのあるパターンかつそのまま実装すればACでしたのでただただなんの工夫もなく終わりました。
次回は2問目のAC目指して頑張りたいと思います。
・ソース
#include<iostream> using namespace std; int main() { int y; cin>>y; if(y%4==0&&y%100!=0||y%400==0){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } return 0; }
AOJ 0055
・問題リンク Sequence
・コメント
cのリハビリとして解いてみました(笑)
ながらくcに触れていなかったので一からやり直した感覚でした。。
AOJの出力形式を思い出すのにも苦労しました(笑)
・ソース
#include<stdio.h> int main() { double value[11]; int i; double sum=0; while(~scanf("%lf",&value[0])){ sum=value[0]; for(i=1;i<10;i++){ if((i+1)%2!=0){//odd number value[i]=value[i-1]/3.0; sum+=value[i]; }else{//even number value[i]=value[i-1]*2.0; sum+=value[i]; } } printf("%.8f\n",sum); } return 0; }
AOJ 0174
・問題リンク Badminton
・コメント
最初のサーブの取り扱いに気をつければあとはそのまま実装するだけですね。
バドミントンは2点差以上つけてゲームセットなので、入力が終わった段階で得点の多い方に点を追加すれば辻褄を合わすことができます。
・ソース
#include<iostream> #include<string> using namespace std; int main() { string str; while(true){ cin>>str; if(str=="0")break; int a=0,b=0; for(int i=1;str[i]!='\0';i++){ if(str[i]=='A'){ a++; }else{ b++; } } if(a>b){ a++; }else{ b++; } cout<<a<<" "<<b<<endl; for(int j=0;j<2;j++){ int fa=0,fb=0; string fstr; cin>>fstr; for(int i=1;fstr[i]!='\0';i++){ if(fstr[i]=='A'){ fa++; }else{ fb++; } } if(fa>fb){ fa++; }else{ fb++; } cout<<fa<<" "<<fb<<endl; } } return 0; }
AOJ 1009
・問題リンク Greatest Common Divisor
・コメント
ユークリッドのなんとかをそのまま実装して終わりでした。
・ソース
#include<iostream> using namespace std; int main() { long long x,y; while(true){ cin>>x>>y; if((x==0&&y==0)||y==0)break; if(y>x){ long long t=x; x=y; y=t; } long long temp; while(y!=0){ x=x%y; temp=x; x=y; y=temp; } cout<<x<<endl; } return 0; }
AOJ 0227
・問題リンク Thanksgiving
・コメント
今回も問題文をしっかり読まず重複を考慮し忘れWA喰らいました(笑)
直感的に、降順ソートしてそれをm個ずつ袋に詰めていくという作業を実装してみました。
・ソース
#include<iostream> #include<set> using namespace std; int main() { int n,m; while(true){ cin>>n>>m; if(n==0&&m==0)break; int p[n]; multiset< int,greater<int> >list; //input for(int i=0;i<n;i++){ cin>>p[i]; list.insert(p[i]); } int ans=0; int i=1; for(multiset<int>::iterator it=list.begin();it!=list.end();it++){ if(i%m==0){ ++i; continue; } ans+=(*it); ++i; } cout<<ans<<endl; } return 0; }
AOJ 0217
・問題リンク Walking in the Hospital
・コメント
mapを利用してソートしました。それにしても2つのものを同時に記憶できるというのは便利ですよね。
・ソース
#include<iostream> #include<map> using namespace std; int main() { int n; while(true){ cin>>n; if(n==0)break; map< int,int,greater<int> >list; int p,d1,d2; for(int i=0;i<n;i++){ cin>>p>>d1>>d2; list.insert( map< int,int >::value_type(d1+d2,p) ); } map< int,int >::iterator it=list.begin(); cout<<(*it).second<<" "<<(*it).first<<endl; } return 0; }
AOJ 0216
・問題リンク Cutting Down Water Bills
・コメント
もっと短く書きたかったんですが即席でできそうだったためそのまま書いてみました。
計算するだけでした。
・ソース
#include<iostream> using namespace std; long calc(long w) { //s1 long mny=1150; //s2 if(w>10){ if((w-10)>=10){ mny+=(125*10); }else{ mny+=(125*(w-10)); } } //s3 if(w>20){ if((w-20)>=10){ mny+=(140*10); }else{ mny+=(140*(w-20)); } } //s4 if(w>30){ mny+=(160*(w-30)); } return mny; } int main() { long w; while(true){ cin>>w; if(w==-1)break; cout<<(4280-calc(w))<<endl; } return 0; }