Experimental Estimateといえど、atcoder problemsの色が水-水-水-青なの面白い。
眠たいし、アレな回なので真面目な解説はしません。(ごめんなさい)
A – 積雪深差
A - 積雪深差
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
H1−H2 の値を計算して出力してください。という問題。
入出力と四則演算が分かれば解けますね。
#include<bits/stdc++.h>
//#include<atcoder/all>
using namespace std;
//using namespace atcoder;
int main(){
int H1,H2;
cin>>H1>>H2;
cout<<H1-H2<<endl;
}
B – 視程の通報
B - 視程の通報
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
問題文がややこしいですが、ABC001のB,C問題はこんな感じです。
設計書からの実装を意識したとかどうとか…。
頑張って読んでね!としか言いようがないです。
#include<bits/stdc++.h>
//#include<atcoder/all>
using namespace std;
//using namespace atcoder;
int main(){
int m;
cin>>m;
int v;
if(m<100) v=0;
else if(m<=5000) v=m/100;
else if(m<=30000) v=m/1000+50;
else if(m<=70000) v=(m/1000-30)/5+80;
else v=89;
if(v/10==0) cout<<"0";
cout<<v<<endl;
}
C – 風力観測
C - 風力観測
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
7WAしたのは内緒。
浮動小数同士の比較は誤差死しやすいです。
最終的に整数のみで比較できるよう変換しました。
#include<bits/stdc++.h>
//#include<atcoder/all>
using namespace std;
//using namespace atcoder;
int main(){
int D,W;
cin>>D>>W;
string hou;
int tuy;
if(D<113) hou="N";
else if(D<338) hou="NNE";
else if(D<563) hou="NE";
else if(D<788) hou="ENE";
else if(D<1013) hou="E";
else if(D<1238) hou="ESE";
else if(D<1463) hou="SE";
else if(D<1688) hou="SSE";
else if(D<1913) hou="S";
else if(D<2138) hou="SSW";
else if(D<2363) hou="SW";
else if(D<2588) hou="WSW";
else if(D<2813) hou="W";
else if(D<3038) hou="WNW";
else if(D<3263) hou="NW";
else if(D<3488) hou="NNW";
else hou="N";
if(W<2*6+3) tuy=0;
else if(W<15*6+3) tuy=1;
else if(W<33*6+3) tuy=2;
else if(W<54*6+3) tuy=3;
else if(W<79*6+3) tuy=4;
else if(W<107*6+3) tuy=5;
else if(W<138*6+3) tuy=6;
else if(W<171*6+3) tuy=7;
else if(W<207*6+3) tuy=8;
else if(W<244*6+3) tuy=9;
else if(W<284*6+3) tuy=10;
else if(W<326*6+3) tuy=11;
else tuy=12;
if(tuy==0) hou="C";
cout<<hou<<" "<<tuy<<endl;
}
風力は*10を四捨五入。風速は*60に、+3は切り捨て分です。
無駄に条件や式がややこしくなった気がします。
D – 感雨時刻の整理
D - 感雨時刻の整理
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
いもすっぽいですが、制約よわよわなので何も考えなくてOKです。
愚直に実装しましょう。
入出力がhhmm-hhmmだったりと、罠や面倒っぽい所が多いです。
入力例と出力例が合わないときは、もう一度じっくり読んだほうが良いです。(というのも、入力を5分単位で丸める仕様を見落としてハマってました。)
#include<bits/stdc++.h>
using namespace std;
int main(){
int N;
int f[60*24+60]={0};
cin>>N;
for(int i=0;i<N;i++){
string S;
cin>>S;
int sm=stoi(S.substr(0,2));
int ss=stoi(S.substr(2,2));
int em=stoi(S.substr(5,2));
int es=stoi(S.substr(7,2));
while(ss%5!=0) ss--;
while(es%5!=0){
es++;
if(es==60){
es=0;
em++;
}
}
//cout<<sm<<","<<ss<<","<<em<<','<<es<<endl;
int s=sm*60+ss;
int e=em*60+es;
for(int j=s;j<=e;j++) f[j]=1;
}
for(int i=0;i<60*24+60;i++){
if(f[i]){
for(int j=i+1;j<60*24+60;j++){
if(!f[j]){
int sm=i/60;
int ss=i%60;
int em=(j-1)/60;
int es=(j-1)%60;
if(sm<10) cout<<"0";
cout<<sm;
if(ss<10) cout<<"0";
cout<<ss;
cout<<"-";
if(em<10) cout<<"0";
cout<<em;
if(es<10) cout<<"0";
cout<<es;
cout<<endl;
i=j;
break;
}
}
}
}
}
おわりに
大学の課題を思い出しました。
コメント