PKU 1676 What time is it?
http://poj.org/problem?id=1676
何本かの棒が点灯していないかもしれない15分ずれているデジタル表示の時計が入力されるので、その表示から時刻が特定できればその表示を、出来なければそのことを出力しろというような問題。
関数に分けて頑張りました。
string in[3]; string digi[]={ " _ _ _ _ _ _ _ _ ", "| | | _| _||_||_ |_ ||_||_|", "|_| ||_ _| | _||_| ||_| _|", }; bool neq(int ti,int p){ rep(i,3)rep(j,3){ if(digi[i][ti*3+j]==' ' && in[i][p+j]!=' ')return true; } return false; } bool ok(int ti,int p){ if(neq(ti/600,p))return false; if(neq(ti/60%10,p+3))return false; if(neq(ti%60/10,p+6))return false; if(neq(ti%10,p+9))return false; return true; } bool check(int ti){ return ok(ti,0)&&ok((ti-15+24*60)%(24*60),13); } void solve(){ rep(i,3)getline(cin,in[i]); set<int> ans; rep(i,24*60)if(check(i))ans.insert(i); if(SZ(ans)==1)printf("%02d%02d\n",*ans.begin()/60,*ans.begin()%60); else cout<<"Not Sure\n"; } main(){ int T; cin>>T; cin.get(); while(T--)solve(); }