Codeforces 802H. Fake News (medium)
题目
 题意:构造两个字符串
    
     
      
       
        s
       
      
      
       s
      
     
    s,
    
     
      
       
        p
       
      
      
       p
      
     
    p,使
    
     
      
       
        p
       
      
      
       p
      
     
    p在
    
     
      
       
        s
       
      
      
       s
      
     
    s中作为子序列的出现次数恰好等于
    
     
      
       
        n
       
      
      
       n
      
     
    n。
 其中
    
     
      
       
        n
       
       
        ≤
       
       
        1000000
       
      
      
       n≤1000000
      
     
    n≤1000000;
    
     
      
       
        s
       
      
      
       s
      
     
    s,
    
     
      
       
        p
       
      
      
       p
      
     
    p的长度不能超过
    
     
      
       
        200
       
      
      
       200
      
     
    200。
 在构造过程中保证使
    
     
      
       
        s
       
       
        =
       
       
        p
       
       
        u
       
      
      
       s=pu
      
     
    s=pu
 
    
     
      
       
        x
       
      
      
       x
      
     
    x为新字符
 
    
     
      
       
        k
       
       
        →
       
       
        2
       
       
        k
       
       
        +
       
       
        1
       
      
      
       k→2k+1
      
     
    k→2k+1 : 令
    
     
      
       
        s
       
       
        ′
       
       
        =
       
       
        p
       
       
        x
       
       
        u
       
       
        x
       
       
        x
       
       
        ,
       
       
        p
       
       
        ′
       
       
        =
       
       
        p
       
       
        x
       
      
      
       s′=pxuxx,p′=px
      
     
    s′=pxuxx,p′=px(
    
     
      
       
        
         s
        
        
         ′
        
       
      
      
       s'
      
     
    s′中含有
    
     
      
       
        p
       
       
        x
       
       
        ,
       
       
        p
       
       
        u
       
       
        x
       
       
        ,
       
       
        p
       
       
        u
       
       
        x
       
      
      
       px,pux,pux
      
     
    px,pux,pux)
 
    
     
      
       
        k
       
       
        →
       
       
        2
       
       
        k
       
       
        +
       
       
        2
       
      
      
       k→2k+2
      
     
    k→2k+2 : 令
    
     
      
       
        s
       
       
        ′
       
       
        =
       
       
        p
       
       
        x
       
       
        x
       
       
        u
       
       
        x
       
       
        x
       
       
        ,
       
       
        p
       
       
        ′
       
       
        =
       
       
        p
       
       
        x
       
      
      
       s′=pxxuxx,p′=px
      
     
    s′=pxxuxx,p′=px
#include<bits/stdc++.h>
using namespace std;
string p,s;
int n;
void dfs(int n,char c){
	if (n==1){
		s+=c,p+=c;
		return;
	}else if (n==2){
		s+=c,s+=c,p+=c;
		return;
	}
	if (n&1){
		dfs(n/2,c+1);
		s=p+c+s.substr(p.size(),s.size()-p.size()+1)+c+c,p+=c;
	}else{
		dfs(n/2-1,c+1);
		s=p+c+c+s.substr(p.size(),s.size()-p.size()+1)+c+c,p+=c;
	}
}
int main(){
	scanf("%d",&n);
	dfs(n,'a');
	cout<<s<<' '<<p;
}
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号