codeforces #83 div2
A
time = hours * 60 + minutes に変換する。
int rev(int n){
return (n/10)+10*(n%10);
}
int main(){
int time,h,m;
scanf("%d:%d",&h,&m);
time = 60*h+m;
while(true){
time = (time+1)%(24*60);
h = time/60;
m = time%60;
if(rev(h)==m){
printf("%02d:%02d\n",h,m);
break;
}
}
return 0;
}
B
sortして、隣接する二項間の比を調べる。
int main(){
int n;
cin>>n;
vector<int> a(n);
REP(i,n)cin>>a[i];
sort(a.begin(),a.end());
bool ans = false;
REP(i,n-1){
if(a[i]!=a[i+1]&&a[i+1]<2*a[i]){
ans = true;
}
}
if(ans){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
return 0;
}
C
inputがないhouseからdfsする。inputもoutputもないときの処理に注意。
struct course{
int tank,tap,amt;
course(int tank,int tap,int amt):tank(tank),tap(tap),amt(amt){}
};
bool operator < (const course &e, const course &f){
return e.tank < f.tank;
}
int main(void){
int n,p;
cin>>n>>p;
int out[1001];
bool in[1001]={};
bool arv[1001]={};
int amount[1001];
REP(i,n){
out[i] = -1;
}
REP(i,p){
int a,b,c;
cin>>a>>b>>c;
a--;b--;
out[a] = b;
amount[a] = c;
in[b] = true;
}
vector<course> ans;
REP(i,n){
if(in[i]) continue;
int minamt = amount[i];
int next = out[i];
if(next==-1) continue;
bool loop = false;
while(out[next]!=-1){
minamt = min(minamt,amount[next]);
arv[next] = true;
next = out[next];
if(arv[next]){
loop = true;
break;
}
}
if(!loop){
ans.push_back(course(i,next,minamt));
}
}
sort(ans.begin(),ans.end());
cout<<ans.size()<<endl;
REP(i,ans.size()){
printf("%d %d %d\n",ans[i].tank+1,ans[i].tap+1,ans[i].amt);
}
return 0;
}