http://poj.org/problem?id=1363
int main()
{
int N;
scanf("%d", &N);
while (N)
{
int num;
scanf("%d", &num);
// the number of numbers input
int cnt = 1;
// fprintf(stderr, "num: %d, cnt: %d\n", num, cnt);
if (!num)
{
printf("\n");
scanf("%d", &N);
continue;
}
int instacktop = 1;
stack<int> outstack;
bool flag = true;
while (true)
{
while (instacktop <= N && instacktop <= num)
{
outstack.push(instacktop);
instacktop++;
}
if (outstack.empty() || outstack.top() != num)
{
flag = false;
break;
}
outstack.pop();
if (cnt == N)
{
break;
}
scanf("%d", &num);
cnt++;
// fprintf(stderr, "num: %d, cnt: %d\n", num, cnt);
}
// get the rest of numbers
while (cnt < N)
{
scanf("%d", &num);
cnt++;
fprintf(stderr, "num: %d, cnt: %d\n", num, cnt);
}
if (flag)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
这个解法有人解析一下吗?以上是原题链接与本解法代码,正常解法看得懂,这个看不懂