POJ 1978 Hanafuda Shuffle
問題
花札をシャッフルして、操作を終えたときの一番上を求めよ。
解法
普通にやるだけだった。
調べたら、終わりからシミュレーションするという賢い方法があるらしいので
こんどやってみようと思う。
#include <cstdio> using namespace std; int N, R; int cards[51]; void suff(int p, int c){ int temp[p]; for(int i = 1; i < p; i++){ temp[i] = cards[i]; } for(int i = 0; i < c; i++){ cards[i + 1] = cards[p + i]; } for(int i = c + 1; i < p + c; i++){ cards[i] = temp[i - c]; } } int main(){ while(scanf("%d %d", &N, &R)&&N != 0){ for(int i = 1; i < N + 1; i++){ cards[i] = N - i + 1; } for(int i = 0; i < R; i++){ int p, c; scanf("%d %d", &p, &c); suff(p, c); } printf("%d\n", cards[1]); } return 0; }