ACM/ICPC


2004Aの問題


回答者:ほへい

解法:逆順に切っていく。
    最後に一番上にあったカードが、初めの状態でどの位置にあったかで判定。

所要時間:30分

速度:データセット瞬殺

実行環境:PenM 1.6GHz 512M Win2000

#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);
}

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-11-21 (木) 11:25:35 (1612d)