做法:打表找规律
大数是过不了这个题的(但可以用来打表)
先找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; }
顺便写下北京站的心得吧
三题拿铜滚粗,给学校丢人了
本身很菜,可能是最后一次区域赛了
北大的氛围好舒服啊,我好想去(逃)