地址:https://codeforces.com/problemset/problem/1202/D
题意:给出n,构造含有n个子1337的字符串。
解析:本来想的是1.....1337的,但是看数据s=1e5,而n达到了1e9,显然不行。
对于n的贡献,3是最大的,而7又是消耗最少的。所以可以构造133/777....../33......7
对于第一组1337,7的个数即为可构造的种类数。
第二组的末尾7,构造数取决于所有3的数目:x*(x-1)/2
所以先算出x*(x-1)/2<=n的最大x,n-减去x*(x-1)/2即为需要补的中间7的数目,x-2即为去掉第一组3后需要打印的3的数目。
最后结尾打个7。
算了一下,这个不会超:
3的个数x,对答案的贡献是x*(x-1)/2,考虑极端情况,n=1e9,x也就大概1e4.5而已。不够的用7去补就可以了,不会超1e5。
#include<bits/stdc++.h> #include<map> using namespace std; typedef long long ll; int main() { int t; cin>>t; while(t--) { int n; cin>>n; cout<<"133"; int b=1; while(b*(b-1)/2<=n) { b++; } b--; for(int i=1;i<=n-b*(b-1)/2;i++) cout<<"7"; for(int i=1;i<=b-2;i++) cout<<"3"; cout<<"7"<<endl; } }