题目链接:http://codeforces.com/contest/1202/problem/D
题意:T组,每次给你一个数n,要求你构建输出一个字符串(len <= 1e5,只有1,3,7组成),使得这个串中有n个“1337”子串。
思路:
组合成133(B个7)((A - 2)个3)7的形式
n个子串即为B + ((A - 2) * ((A - 1) - 2) / 2), -2是因为前面有两个3哇
AC代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int t,n,A,B;
void solve(){//i * j / 2 <= n
int p = sqrt(n * 2);
for(int i = p;i <= n * 2; i++){
if(i * (i - 1) <= n * 2 && (i + 1) * i > n * 2){
A = i;
B = n - A * (A - 1) / 2;
break;
}
}
//A 个 3 (A * (A - 1) / 2)种排列
printf("133");
for(int i = 1;i <= B; i++) printf("7");
for(int i = 1;i <= A - 2; i++) printf("3");
printf("7\n");
}
int main()
{
scanf("%d",&t);
while(t--){
scanf("%d",&n);
solve();
}
}