この大会は、Codeforcesの特別な大会であり、100大会記念の大会でもあります。100大会おめでとう!
[ルール]
この大会では、運営者側が直前に発表するマイナーな言語一つしか使うことができません。今回はPike7.8という言語でした。この言語、TIOBEの100位にも入っていないマイナー言語です。
[参戦記]
スタートして、まずはコンパイラを導入しました。私はUbuntu11.04を使っていますが、次のコマンドでインストールできます。
sudo apt-get install pike7.8
そして、何はともあれチュートリアルを読みました。(こちらです。(英語)).
この大会、後ろに用事があって3時間中2時間しか参加できないので、2問解ければいいや、という気持ちで臨みました。
A: read関数とキャストを用います。acceptedは0:43でした。
- 整数の入力(標準入力からの読み取り)がわからなかったので、readとキャストです。
- 幸いなことにpikeでは、string型変数をint型変数にキャストすると、Cのatoiと同じ働きをしてくれるようです。
C: 文字列を使います。acceptedは1:54でした。
- 文字列は、0オフセットで、s[n]のように書けば、第n$文字目を取得できます。ただし、その文字コードを示すintの値になります。
- したがって、文字コードから'0'を引いてやれば、然るべき値になります。
結果、ペナルティー=177, 順位=155位/805人 でした。
次のソースはPike7.8で書いたものです。
コンパイルして試したければ、次のコマンドを実行してみてください。
pike7.8 source.pike
[A]
int main(){
int n,k,m;
n=(int)Stdio.stdin->read(2);
k=(int)Stdio.stdin->read(3);
m=(int)Stdio.stdin->read(3);
if(n*n>k*m*m) write("NO\n");
else{
if(m==n) write("YES\n");
else if(k<4) write("NO\n");
else write("YES\n");
}
return 0;
}
[C]
int main(){
string A=Stdio.stdin->gets();
string B=Stdio.stdin->gets();
string C;
int alen,blen;
int i,j,k=0,tmp;
alen=strlen(A);
blen=strlen(B);
for(i=alen-1,j=blen-1;i>=0 || j>=0;i--,j--){
if(i<0){
tmp=B[j]-'0'+k;
k=tmp/10;
tmp%=10;
}else if(j<0){
tmp=A[i]-'0'+k;
k=tmp/10;
tmp%=10;
}else{
tmp=A[i]-'0'+B[j]-'0'+k;
k=tmp/10;
tmp%=10;
}
if(i==alen-1 && j==blen-1) C=sprintf("%d",tmp);
else C+=sprintf("%d",tmp);
}
if(k==1) C+=sprintf("%d",1);
for(i=strlen(C)-1;i>=0;i--) write("%c",C[i]);
write("\n");
return 0;
}
0 件のコメント:
コメントを投稿