POJ 1059 Chutes and Ladders

POJ_1059

    由于题目说了最后掷骰子的次数不会超过1000,所以直接模拟掷骰子的过程即可。

#include<stdio.h>
#include<string.h>
#define MAXN 1010
#define MAXD 110
#define MAXP 10
int P, die[MAXN], g[MAXD], turn[MAXP], a[MAXP];
void init()
{
int i, j, k;
for(i = 0; ; i ++)
{
scanf("%d", &k);
if(!k)
break;
die[i] = k;
}
}
void solve()
{
int i, j, k;
memset(g, 0, sizeof(g));
for(;;)
{
scanf("%d%d", &i, &j);
if(!i && !j)
break;
g[i] = j;
}
for(;;)
{
scanf("%d", &k);
if(!k)
break;
if(k < 0)
g[-k] = -1;
else
g[k] = -2;
}
memset(turn, -1, sizeof(turn));
memset(a, 0, sizeof(a));
for(i = k = 0; ; i ++)
{
if(turn[k])
{
j = a[k] + die[i];
if(j == 100)
break;
if(j > 100)
{
k = (k + 1) % P;
continue;
}
if(g[j] == -2)
{
a[k] = j;
continue;
}
if(g[j] == -1)
{
a[k] = j;
turn[k] = 0;
}
else if(g[j] == 0)
a[k] = j;
else
a[k] = g[j];
}
else
turn[k] = -1;
k = (k + 1) % P;
}
printf("%d\n", k + 1);
}
int main()
{
init();
for(;;)
{
scanf("%d", &P);
if(!P)
break;
solve();
}
return 0;
}


原文地址:https://www.cnblogs.com/staginner/p/2330737.html