题解 CF1202D Print a 1337-string...

题目:CF1202D Print a 1337-string...

很巧妙的构造题呢。

很显然我们只需要一个1。我们把数列写成1337777333333777777这种形式,就是133k个7n个3m个7,有2个3和(k+m)个7就会产生(k+m)的贡献,有n个3和m个7就会产生(n-1)*m的贡献。然后我们只要让(n-1)*m+k+m=N就可以了,其中N是输入的。由于长度限制,我们确定一下后面3的个数,直接计算就行了。这里选取的是300,足够了。

 1 #include<stdio.h>
 2 #define it register int
 3 #define il inline
 4 int n,k,len,T,nlen,ys;
 5 il void fr(int &num){
 6     num=0;char c=getchar();int p=1;
 7     while(c<'0'||c>'9') c=='-'?p=-1,c=getchar():c=getchar();
 8     while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
 9     num*=p;
10 }   
11 int main(){
12     k=300,len=k*(k+1)/2;
13     fr(T);
14     while(T--){
15         fr(n);
16         nlen=n/len,ys=n-nlen*len;
17         printf("133");
18         for(it i=1;i<=ys;++i) putchar('7');
19         for(it i=1;i<k;++i) putchar('3');
20         for(it i=1;i<=nlen;++i) putchar('7');
21         putchar('
');
22     } 
23     return 0;
24 }
View Code
原文地址:https://www.cnblogs.com/Kylin-xy/p/11706964.html