https://codeforces.com/problemset/problem/1202/D
题意:给出n,构造一个长度不超过1e5的串,仅由1, 3, 7组成,使得其为1337的子序列数量恰好为n。
思路:很妙,如果只是单独构造1或7的数量会超过1e5;如果只构造1和7那就会很麻烦;所以我们构造3,很容易知道如果构造出k个3,那么就可以存在k * (k - 1) / 2个1337,n最大为1e9,所以我们可以暴力枚举求出最接近且不超过n的k,剩下的用1来凑,然后答案就形如——133333…1111…337。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int main()
{
int t, n;
cin >> t;
while(t--)
{
cin >> n;
printf("1");
int res;
for(int i = 1;i <= 100000;i++)
{
if((ll)i * (i - 1) / 2 > n)
{
for(int j = 1;j <= i - 3;j++) printf("3");
res = (i - 1) * (i - 2) / 2;
break;
}
}
res = n - res;
for(int i = 1;i <= res; i++) printf("1");
printf("337\n");
}
return 0;
}