2008C
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[08年度-ACM-ICPC国内予選]]
***2008C [#i0a53608]
回答者:[[ねいむ]]&br;
所要時間:50分(打込み30分)/0ミス&br;
予選時:クリア
ぱっと見難しそうで、始めはDからやろうと考えていたが、~
よくよく見てみると検索・置換関数使い回しで全て処理しきれると確信。~
個人的には6問中で最も自分と相性の良い問題だったと思う。~
~
だが焦ってソースを打ち込んでいたため、~
ミスはないと思いつつも、悪い意味で“非常にわかりやすい”コードになった。~
それでもこれまでの人生で一番、打ってて楽しい(可笑しい?)と思ったソースコード。~
これは永遠に記憶に残るに違いない。~
~
#include <stdio.h>
#include <string.h>
bool replace(char* std_str, char* str, char* str2);
void main()
{
int count;
char std[80], edt[80];
FILE *in,*out;
in=fopen("c_in.txt","r");
out=fopen("c_out.txt","w");
while(true)
{
fscanf(in, "%s", std);
if(strncmp(std, ".", 1) == 0) break;
count = 0;
for(int i = 0; i < 27; i++)
{
strcpy(edt,std);
while(true)
{
// pqr
switch(i)
{
case 0: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break;
case 1: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break;
case 2: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break;
case 3: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break;
case 4: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break;
case 5: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break;
case 6: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break;
case 7: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break;
case 8: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break;
case 9: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break;
case 10: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break;
case 11: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break;
case 12: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break;
case 13: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break;
case 14: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break;
case 15: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break;
case 16: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break;
case 17: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break;
case 18: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break;
case 19: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break;
case 20: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break;
case 21: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break;
case 22: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break;
case 23: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break;
case 24: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break;
case 25: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break;
case 26: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break;
}
break;
}
while(true)
{
// -
if(replace(edt, "-2", "0")) continue;
if(replace(edt, "-1", "1")) continue;
if(replace(edt, "-0", "2")) continue;
// *
if(replace(edt, "(0*0)", "0")) continue;
if(replace(edt, "(0*1)", "0")) continue;
if(replace(edt, "(0*2)", "0")) continue;
if(replace(edt, "(1*0)", "0")) continue;
if(replace(edt, "(1*1)", "1")) continue;
if(replace(edt, "(1*2)", "1")) continue;
if(replace(edt, "(2*0)", "0")) continue;
if(replace(edt, "(2*1)", "1")) continue;
if(replace(edt, "(2*2)", "2")) continue;
// +
if(replace(edt, "(0+0)", "0")) continue;
if(replace(edt, "(0+1)", "1")) continue;
if(replace(edt, "(0+2)", "2")) continue;
if(replace(edt, "(1+0)", "1")) continue;
if(replace(edt, "(1+1)", "1")) continue;
if(replace(edt, "(1+2)", "2")) continue;
if(replace(edt, "(2+0)", "2")) continue;
if(replace(edt, "(2+1)", "2")) continue;
if(replace(edt, "(2+2)", "2")) continue;
break;
}
if(strcmp(edt, "2") == 0) count++;
}
fprintf(out, "%d\n", count);
}
fclose(in);
fclose(out);
}
bool replace(char* std_str, char* str, char* str2)
{
char* index;
char changed[80];
memset(changed, 0, sizeof(char) * 80);
index = strstr(std_str, str);
if(index > 0)
{
strncpy(changed, std_str, (long)(index - std_str));
strcat(changed, str2);
strcat(changed, &index[strlen(str)]);
strcpy(std_str, changed);
return true;
}
return false;
}
良い子は真似しないでね。~
終了行:
[[08年度-ACM-ICPC国内予選]]
***2008C [#i0a53608]
回答者:[[ねいむ]]&br;
所要時間:50分(打込み30分)/0ミス&br;
予選時:クリア
ぱっと見難しそうで、始めはDからやろうと考えていたが、~
よくよく見てみると検索・置換関数使い回しで全て処理しきれると確信。~
個人的には6問中で最も自分と相性の良い問題だったと思う。~
~
だが焦ってソースを打ち込んでいたため、~
ミスはないと思いつつも、悪い意味で“非常にわかりやすい”コードになった。~
それでもこれまでの人生で一番、打ってて楽しい(可笑しい?)と思ったソースコード。~
これは永遠に記憶に残るに違いない。~
~
#include <stdio.h>
#include <string.h>
bool replace(char* std_str, char* str, char* str2);
void main()
{
int count;
char std[80], edt[80];
FILE *in,*out;
in=fopen("c_in.txt","r");
out=fopen("c_out.txt","w");
while(true)
{
fscanf(in, "%s", std);
if(strncmp(std, ".", 1) == 0) break;
count = 0;
for(int i = 0; i < 27; i++)
{
strcpy(edt,std);
while(true)
{
// pqr
switch(i)
{
case 0: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break;
case 1: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break;
case 2: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break;
case 3: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break;
case 4: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break;
case 5: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break;
case 6: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break;
case 7: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break;
case 8: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break;
case 9: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break;
case 10: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break;
case 11: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break;
case 12: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break;
case 13: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break;
case 14: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break;
case 15: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break;
case 16: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break;
case 17: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break;
case 18: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break;
case 19: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break;
case 20: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break;
case 21: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break;
case 22: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break;
case 23: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break;
case 24: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break;
case 25: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break;
case 26: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break;
}
break;
}
while(true)
{
// -
if(replace(edt, "-2", "0")) continue;
if(replace(edt, "-1", "1")) continue;
if(replace(edt, "-0", "2")) continue;
// *
if(replace(edt, "(0*0)", "0")) continue;
if(replace(edt, "(0*1)", "0")) continue;
if(replace(edt, "(0*2)", "0")) continue;
if(replace(edt, "(1*0)", "0")) continue;
if(replace(edt, "(1*1)", "1")) continue;
if(replace(edt, "(1*2)", "1")) continue;
if(replace(edt, "(2*0)", "0")) continue;
if(replace(edt, "(2*1)", "1")) continue;
if(replace(edt, "(2*2)", "2")) continue;
// +
if(replace(edt, "(0+0)", "0")) continue;
if(replace(edt, "(0+1)", "1")) continue;
if(replace(edt, "(0+2)", "2")) continue;
if(replace(edt, "(1+0)", "1")) continue;
if(replace(edt, "(1+1)", "1")) continue;
if(replace(edt, "(1+2)", "2")) continue;
if(replace(edt, "(2+0)", "2")) continue;
if(replace(edt, "(2+1)", "2")) continue;
if(replace(edt, "(2+2)", "2")) continue;
break;
}
if(strcmp(edt, "2") == 0) count++;
}
fprintf(out, "%d\n", count);
}
fclose(in);
fclose(out);
}
bool replace(char* std_str, char* str, char* str2)
{
char* index;
char changed[80];
memset(changed, 0, sizeof(char) * 80);
index = strstr(std_str, str);
if(index > 0)
{
strncpy(changed, std_str, (long)(index - std_str));
strcat(changed, str2);
strcat(changed, &index[strlen(str)]);
strcpy(std_str, changed);
return true;
}
return false;
}
良い子は真似しないでね。~
ページ名: