1 条题解
-
0
2024.09.29
已修正数据并参照原数据添加Hack,Hack中最大化了开点数;
关于空间大小:如果2*10^8开不下,请使用更节省空间的数据类型,
由于01串长最大为64,会有大量重复的点,可以尝试dfs一下看看最多可能用到多少点
———Nanxl07
#include <bits/stdc++.h> using namespace std; const int N=46100005; char ch[65],ex[N],ans[N]; int n,a[N][2],cnt,g[65]; int main(){ scanf("%d", &n); for(int i=1;i<=n;i++){ scanf("%s", ch+1); int k=strlen(ch+1), nw=0; for(int j=1;j<=k;j++){ int p=ch[j]-'0'; if(!a[nw][p])a[nw][p]=++cnt; nw=a[nw][p]; g[j]=nw; } if(!ex[nw]){ ex[nw]=1; for(int j=k-1;j>=1;j--){ int p=g[j]; if(ex[a[p][0]]!=1 && ex[a[p][1]]!=1)ex[p]=1; else ex[p]=2; } } ans[i]=(ex[a[0][0]]==1||ex[a[0][1]]==1); } ans[n+1]=-1; int st=1; for(int i=2;i<=n+1;i++){ if(ans[i]!=ans[i-1]){ cout << (ans[i-1]?"Adam":"Eve") << ' ' << st << ' ' << i-1 << endl; st=i; } } return 0; }———Nanxl07
- 1
信息
- ID
- 442
- 时间
- 3000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 29
- 已通过
- 8
- 上传者