2004Aの解答
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[ACM/ICPC]]&br;
&br;
&br;
[[2004Aの問題:http://www.acm-japan.org/past-icpc/domestic2004/A.jp/A.html]]&br;
&br;
&br;
回答者:[[ほへい]]&br;
&br;
解法:逆順に切っていく。&br;
最後に一番上にあったカードが、初めの状態でどの位置にあったかで判定。&br;
&br;
所要時間:30分&br;
&br;
速度:データセット瞬殺&br;
&br;
実行環境:PenM 1.6GHz 512M Win2000&br;
&br;
#include<stdio.h>
int cutting[50][2];
int num_hanahuda;
int num_cutting;
int answer;
char *file_in = "2004A_in.txt";
char *file_out = "2004A_out.txt";
FILE *fp_in, *fp_out;
void setCutting(void);
void getAnswer(void);
int main(void)
{
fp_in = fopen(file_in, "r");
fp_out = fopen(file_out, "w");
while(1) {
fscanf(fp_in, "%d", &num_hanahuda);
fscanf(fp_in, "%d", &num_cutting);
printf("%d", num_hanahuda);
printf("\n%d\n", num_cutting);
setCutting();
if(num_hanahuda == 0 && num_cutting == 0) break;
getAnswer();
}
fclose(fp_in);
fclose(fp_out);
return 0;
}
void setCutting()
{
int i;
for(i = 0; i < num_cutting; i++) {
fscanf(fp_in,"%d", &cutting[i][0]);
fscanf(fp_in, "%d", &cutting[i][1]);
}
}
void getAnswer()
{
answer = 1;
for(; num_cutting > 0; num_cutting--) {
if(answer <= cutting[num_cutting - 1][0] + cutting[num_cutting - 1][1] - 1) {
if(answer <= cutting[num_cutting - 1][1]) {
answer += cutting[num_cutting - 1][0] - 1;
}
else {
answer -= cutting[num_cutting - 1][1];
}
}
}
answer = num_hanahuda - answer + 1;
fprintf(fp_out, "%d\n", answer);
}
終了行:
[[ACM/ICPC]]&br;
&br;
&br;
[[2004Aの問題:http://www.acm-japan.org/past-icpc/domestic2004/A.jp/A.html]]&br;
&br;
&br;
回答者:[[ほへい]]&br;
&br;
解法:逆順に切っていく。&br;
最後に一番上にあったカードが、初めの状態でどの位置にあったかで判定。&br;
&br;
所要時間:30分&br;
&br;
速度:データセット瞬殺&br;
&br;
実行環境:PenM 1.6GHz 512M Win2000&br;
&br;
#include<stdio.h>
int cutting[50][2];
int num_hanahuda;
int num_cutting;
int answer;
char *file_in = "2004A_in.txt";
char *file_out = "2004A_out.txt";
FILE *fp_in, *fp_out;
void setCutting(void);
void getAnswer(void);
int main(void)
{
fp_in = fopen(file_in, "r");
fp_out = fopen(file_out, "w");
while(1) {
fscanf(fp_in, "%d", &num_hanahuda);
fscanf(fp_in, "%d", &num_cutting);
printf("%d", num_hanahuda);
printf("\n%d\n", num_cutting);
setCutting();
if(num_hanahuda == 0 && num_cutting == 0) break;
getAnswer();
}
fclose(fp_in);
fclose(fp_out);
return 0;
}
void setCutting()
{
int i;
for(i = 0; i < num_cutting; i++) {
fscanf(fp_in,"%d", &cutting[i][0]);
fscanf(fp_in, "%d", &cutting[i][1]);
}
}
void getAnswer()
{
answer = 1;
for(; num_cutting > 0; num_cutting--) {
if(answer <= cutting[num_cutting - 1][0] + cutting[num_cutting - 1][1] - 1) {
if(answer <= cutting[num_cutting - 1][1]) {
answer += cutting[num_cutting - 1][0] - 1;
}
else {
answer -= cutting[num_cutting - 1][1];
}
}
}
answer = num_hanahuda - answer + 1;
fprintf(fp_out, "%d\n", answer);
}
ページ名: