POJ1363题目求解
  • 板块学术版
  • 楼主置换序列
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/3/2 23:49
  • 上次更新2023/11/5 02:30:53
查看原帖
POJ1363题目求解
488905
置换序列楼主2021/3/2 23:49

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;
}

这个解法有人解析一下吗?以上是原题链接与本解法代码,正常解法看得懂,这个看不懂

2021/3/2 23:49
加载中...