提交时间:2024-10-11 14:43:28

运行 ID: 33576

#include<bits/stdc++.h> using namespace std; #define int long long int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}x=c-'0';c=getchar();while(c<='9'&&c>='0'){x*=10;x+=c-'0';c=getchar();}return x*f;} const int MAXN=5010; int n,m,a[MAXN]; std::string s,v; std::string lis[MAXN+5]; std::vector<int> id[MAXN+5]; bool del[MAXN+5],used[MAXN+5]; int num[MAXN+5]; int v_s[MAXN+5]; int check(){ for(int i=0;i<=n;i++)v_s[i]=num[i]=del[i]=used[i]=0,lis[i]="",id[i].clear(); int m=(int)v.size(); for(int i=0;i<=n-m;i++){ for(int j=0;j<m;j++){ lis[i]+=s[i+j]; } } int len=n-m+1; std::sort(lis,lis+len); len=std::unique(lis,lis+len)-lis-1; v_s[0]=v[0]-'0'; for(int i=1;i<m;i++){ v_s[i]=v_s[i-1]+v[i]-'0'; } for(int i=0;i<len;i++){ int sum=0; for(int j=0;j<m;j++){ sum+=lis[i][j]-'0'; if(sum==v_s[j]){ num[j]++; } else{ id[j].push_back(i); } } } int ans_num=0; int lst=len; while(lst>1){ ans_num++; int mn_val=n+1,mn_id=-1; for(int i=0;i<m;i++){ if(used[i]){ continue; } if(num[i]<mn_val){ mn_val=num[i],mn_id=i; } } used[mn_id]=1; for(int i:id[mn_id]){ if(del[i]){ continue; } del[i]=1; lst--; int sum=0; for(int j=0;j<m;j++){ sum+=lis[i][j]-'0'; if(sum==v_s[j]){ num[j]--; } } } } return ans_num; } int ans; string as,av; void dfs(int now){ if(now==n){ for(int i=0;i<n;i++){ v=""; for(int j=i;j<n;j++){ v+=s[j]; int tmp=check(); if(tmp>ans){ ans=tmp; as=s,av=v; } } } return; } s[now]='0'; dfs(now+1); s[now]='1'; dfs(now+1); } void slv(){ //srand(clock()); n=read(); if(n==8)printf("01011010\n0110\n"); else if(n==20)printf("00001001100101010110\n0101010\n"); else if(n==200){ // printf("10101010100110100101010110101010100101101010100110011001010101010101010101010110010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010101010101010101010110\n01010101010101010101010101010101010101010101010101010101010101010101010101010101"); ans=0; // while(1){ s.clear(),v.clear(); for(int i=1;i<=200;i+=2){ // printf("01"); s+="01"; } swap(s[100],s[101]); for(int i=1;i<=100;i+=2){ // printf("01"); v+="01"; } // v[100]='0'; // int tmp=check(); // if(tmp>ans){ // ans=tmp; // cout<<ans<<endl; cout<<s<<endl; cout<<v<<endl; // } // } } else{ for(int i=1;i<=5000;i+=2)s+="01"; swap(s[2500],s[2501]); for(int i=1;i<=2500;i+=2)v+="01"; // ans=0; // while(1){ // s.clear(),v.clear(); // for(int i=1;i<=1900;i+=2){ // // printf("%s",rand()&1?"01":"10"); // int t=rand()%100; // s+=t==1?"00":t==2?"11":t&1?"10":"01"; // } // for(int i=1901;i<=3100;i+=2){ // // printf("01"); // s+="01"; // } // for(int i=3101;i<=5000;i+=2){ // // printf("%s",rand()&1?"01":"10"); // int t=rand()%100; // s+=t==1?"00":t==2?"11":t&1?"10":"01"; // } // // for(int i=x+81;i<=n;i++){ // // printf("%d",rand()%2); // // } // // printf("\n"); // for(int i=1;i<=1200;i+=2){ // v+="01"; // // printf("%lld",i&1^1); // } // int tmp=check(); // if(tmp>ans){ // ans=tmp; // cout<<tmp<<endl; cout<<s<<endl; cout<<v<<endl; // } // } } // for(n=4;n<=20;n++){ // s.clear();ans=0; // for(int i=0;i<n;i++)s+="0"; // dfs(0); // cout<<as<<endl; // cout<<av<<endl; // } } signed main(){ slv(); return 0; }