まず、"Open the Dragon Scroll"を解きました。一読してすぐにコードを書きました。大変シンプルで、10分で解けてしまいました。
次いで"Vote for the Noodle Soup"にとりかかりました。今年のMay cook-offの"Popular Rice Recipe"と似たような問題に思えましたが、少し違っていました。最初、最大値を取るだけかと思いましたが、+3と-2があったとき、答えは4という反例を見つけました。再度考えなおして、35分かけて正解でした。
他の問題は自分には難しすぎると思いましたのでやめました。
成績は2/5、順位は140位でした。レートは1051.821->1137.42と変化し、総合順位は269位になりました。
今回1位のlaycurseさん、おめでとうございます。また、ソース参考にさせていただきます。
#include<stdio.h>
int main(void){
unsigned int n,a,b,p;
unsigned int count;
unsigned int out;
unsigned int i;
scanf("%u",&p);
while(p--){
scanf("%u %u %u",&n,&a,&b);
count=0;
out=0;
for(i=0;i<n;i++) count+=((a>>i)&1)+((b>>i)&1);
if(count>n) count-=2*(count-n);
for(i=0;i<count;i++) out+=(1<<n-i-1);
printf("%u\n",out);
}
return 0;
}
[Vote for the Noodle Soup]
#include<stdio.h>
#include<stdlib.h>
int main(void){
int vote[1000];
char pm;
int input;
unsigned int n;
unsigned int i;
unsigned int count;
while(scanf("%u%*c",&n) && n){
count=0;
for(i=0;i<n;i++){
scanf("%c %d%*c",&pm,&input);
input+=(pm=='P')?-1:1;
vote[i]=input;
}
for(i=0;i<n;i++){
if(count<abs(vote[i])){
count=abs(vote[i]);
}else{
if(abs(vote[i])%2==count%2) continue;
count++;
}
}
printf("%u\n",count);
}
return 0;
}
0 件のコメント:
コメントを投稿