细心即可
#include <iostream>
using namespace std;
int p[7],dice[101],a[101],x,y,k,num,ans,mark[7],turn,player;
void ex(int pp,int x) {
if (a[x]==-2) mark[pp] = 1;
else if (a[x]==-3) mark[pp] = 2;
else if (a[x]!=-1) {
p[pp] = a[x];
ex(pp,p[pp]);
}
}
int main() {
k = 0;
while (scanf("%d",&x) && x!=0) dice[++k] = x;
while (scanf("%d",&num)) {
if (num==0) break;
memset(a,-1,sizeof(a));
while (scanf("%d%d",&x,&y)) {
if (x==0 && y==0) break;
a[x] = y;
}
while (scanf("%d",&x)) {
if (x==0) break;
else if (x<0) a[-x] = -2;
else a[x] = -3;
}
for (int i=1;i<=num;i++) {
p[i] = 0;
mark[i] = 0;
}
player = 1; turn = 1; ans = 0;
while (1) {
p[player] += dice[turn];
if (p[player]==100) {
ans = player;
break;
}
else if (p[player]>100) p[player] -= dice[turn];
else ex(player,p[player]);
if (p[player]==100) {
ans = player;
break;
}
//printf("player: %d pos: %d\n",player,p[player]);
turn++;
if (turn > k) turn = 1;
if (mark[player] != 2) {
player++;
if (player > num) player = 1;
while (mark[player]==1) {
mark[player] = 0;
player++;
if (player > num) player = 1;
}
}
}
printf("%d\n",ans);
}
return 0;
}