2018 ACM-ICPC 亚洲区域赛北京现场赛 I题

做法:打表找规律

大数是过不了这个题的(但可以用来打表)

先找k的前缀,前缀对应边缘数字是哪个 如果第0位是2-9 对应奇数长度的1-8 第0位为1时,第1位为0时对应奇数长度的9,为1-9时对应偶数长度的1-9,剩下的根据奇偶判断先从头到尾再从尾到头跑一编即可

如100会得到909

100234会得到902343209

110会得到1001

11234会得到12344321

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        string k;
        cin >> k;
        if (k.size() == 1 || k == "10")
        {
            if(k.size() == 1)
                cout << (char)(k[0] - 1) << endl;
            else
            {
                cout << "9" << endl;
            }
            continue;
        }
        bool flag = 1;
        if (k[0] == '1' && k[1] > '0')
        {
            flag = 0;
        }
        if (!flag)
        {
            cout << k[1];
            for(int i = 2; i < k.size(); i++)
            {
                cout << k[i];
            }
            for (int i = k.size() - 1; i > 1; i--)
            {
                cout << k[i];
            }
            cout << k[1] << endl;
        }
        else
        {
            int x = 2;
            if (k[0] == '1')
                cout << "9";
            else
            {
                cout << k[0] - 1 << endl;
                x = 1;
            }
            for (int i = 2; i < k.size(); i++)
            {
                cout << k[i];
            }
            for (int i = k.size() - 2; i >= x; i--)
            {
                cout << k[i];
            }

            if (k[0] == '1')
cout
<< "9" << endl; else { cout << k[0] - 1 << endl; } } } return 0; }

顺便写下北京站的心得吧

三题拿铜滚粗,给学校丢人了

本身很菜,可能是最后一次区域赛了

北大的氛围好舒服啊,我好想去(逃)

猜你喜欢

转载自www.cnblogs.com/qq965921539/p/9945079.html