Question

输入一个n,要求如下:

  • 每个字符串由 0 和 1 组成。
  • 每个字符串长度在 1 到 n 之间,且两两长度不同。
  • 集合中任何一个字符串都不是其他字符串的子串。

输出字符串的个数,然后输出字符串。

Solution

简单构造:特判1,2,其余按00,010,0110,01110,...

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const double eps = 1e-8;
const int NINF = 0xc0c0c0c0;
const int INF  = 0x3f3f3f3f;
const ll  mod  = 1e9 + 7;
const ll  maxn = 1e6 + 5;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;cin>>n;
    if(n==1){
        cout<<1<<'\n'<<1<<'\n';
    }
    else if(n==2){
        cout<<2<<'\n'<<0<<'\n'<<11<<'\n';
    }
    else{
        cout<<n-1<<'\n';
        for(int i=2;i<=n;i++){
            for(int j=1;j<=i;j++){
                if(j==1) cout<<0;
                else if(j==i) cout<<0;
                else cout<<1;
            }
            cout<<'\n';
        }
    }
    return 0;
}