列表

详情


OR52. 迷雾

描述

亮亮深吸一口气,打开了地图,地图上写着(X:12,Y:?),这可让亮亮犯了愁,这个问号代表了什么意思呢? 亮亮绞尽脑汁也想不出什么思路,忽然他在地图背面发现了一串数字,数字下面写着一段话“这只是一个1~n的混乱排列,不用在意第i个值”,亮亮眼前一亮,“这个混乱排列中第i个一定是Y的值!”于是,亮亮开始恢复这个混乱排列。

输入描述

每组数据第一行一个整数n(0<n≤25),第二行即现在纸上的数字串

输出描述

一行n个空格隔开的整数,为小明写下的排列。

示例1

输入:

4
2413

输出:

2 4 1 3

原站题解

C++ 解法, 执行用时: 2ms, 内存消耗: 380KB, 提交时间: 2020-10-31

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(void)
{
    int n;
    string strnub;
    while (cin >> n >> strnub)
    {
        vector<int> record(10, 0);
        for (int i = 0; i < strnub.size(); i++)
        {
            if (record[strnub[i] - '0'] != 0)
            {
                string tmp = strnub.substr(i++, 2);
                cout << tmp << " ";
            }
            else
            {
                cout << strnub[i] << " ";
                record[strnub[i] - '0']++;
            }
        }
        cout << endl;
    }
    return 0;
}

C++14 解法, 执行用时: 2ms, 内存消耗: 380KB, 提交时间: 2020-08-15

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(void)
{
    int n;
    string strnub;
    while (cin >> n >> strnub)
    {
        vector<int> record(10, 0);
        for (int i = 0; i < strnub.size(); i++)
        {
            if (record[strnub[i] - '0'] != 0)
            {
                string tmp = strnub.substr(i++, 2);
                cout << tmp << " ";
            }
            else
            {
                cout << strnub[i] << " ";
                record[strnub[i] - '0']++;
            }
        }
        cout << endl;
    }
    return 0;
}

上一题