有 \(n\) 个数位板摆放成一条直线,每个数位板可以显示 \(0 \sim 9\) 的数字。最开始数位板显示的是 \(0\) 。每秒数位板上的数字都会加 \(1\) , \(9\) 的下一个数字是 \(0\) 。当一个数位板被暂停,它上面的数字将会定格在当前秒。
你必须对某个数位板执行一次暂停,在任意可选的时刻。假设选择的位置是 \(x\) ,则位置 \(y\) 的数位板将会在第 \(|y - x|\) 秒后暂停。当所有数位板暂停后,\(n\) 个数位将从左到右按高位到低位构成一个数字。
询问最大可能得到的数字是多少?
假设对第 \(x\) 个数位板暂停,当前读数为 \(k\) 。则可以得到: \(\cdots,1,0,9,8,\cdots,k+1,k,k+1,\cdots,9,0,1,2,\cdots\) 。
观察图像,是根据 \(x\) 轴对称的一个函数,\(f(x) = k\) 。
显然当 \(ans\) 最大,\(a_1 = 9\) 。
- 当在 \((2, 8)\) 暂停, \(a_2 = 8, a_3 = 9\) 。
- 否则 \(a_2 =8, a_3 = 7\) 。
于是数字最大为 \(989012\cdots89012\cdots\) 。
view
#include <bits/stdc++.h>
typedef long long ll;
void solve(){
int n; std::cin >> n;
int cur = 9;
for (int i = 1; i <= n; i++) {
if (i <= 2) std::cout << (10 - i);
else {
std::cout << cur;
cur = (cur + 1) % 10;
}
}
std::cout << "\n";
}
int main() {
int _ = 1; std::cin >> _;
while (_--) {solve();}
return 0;
}