トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

2004da1.c

// 2004 国内予選 問題A
// 配列を2つ使う

#include <stdio.h>

#define N 51

int main(void)
{
	int n, r, p, c, i, j;
	int card[N+1], tmp[N+1]; // cardはカードの山、tmpはコピー用
							 // 添え字を1から始める
	
	while(1){
		scanf("%d %d", &n, &r);
		if(n==0 && r==0){
			break;
		}
		
		// カードを並べる
		for(i=1; i<=n; i++){
			card[i]=n-i+1;
		}
		
		for(i=0; i<r; i++){
			scanf("%d %d", &p, &c);
			
			//1枚目からp-1枚目をtmpにコピーしておく
			for(j=1; j<=p-1; j++){
				tmp[j]=card[j];
			}
			
			// p枚目からp+c-1枚目を1枚目にコピーする
			for(j=1; j<=c; j++){
				card[j]=card[(p-1)+j];
			}
			
			// tmpに保存してあったのを、c+1枚目にコピーする
			for(j=1; j<=p-1; j++){
				card[c+j]=tmp[j];
			}
		}
		printf("%d\n", card[1]);
	}
	
	return(0);
}