2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N=2e5+10; struct Block{int st,ed;}B[N],B2[N];int len,len2; int n,a[N],nxt[N]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); a[n+1]=-1; for(int i=1;i<n;i++)if(a[i]==a[i+1])nxt[i]=i+1;else nxt[i]=0; len=0; for(int i=1,st=1;i<=n;i++) { if(a[i]!=a[i+1]) { B[++len]={st,i}; st=i+1; } } while(len) { len2=0; for(int i=1;i<=len;i++) { printf("%d ",B[i].st); B[i].st=nxt[B[i].st]; if(B[i].st) { if(len2 && a[B2[len2].ed]==a[B[i].st]) { nxt[B2[len2].ed]=B[i].st; B2[len2].ed=B[i].ed; } else B2[++len2]=B[i]; } } printf("\n"); len=len2; for(int i=1;i<=len2;i++)B[i]=B2[i]; } return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; struct Block{int st,ed;}B[N],B2[N];int len,len2; int n,a[N],nxt[N]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); a[n+1]=-1; for(int i=1;i<n;i++)if(a[i]==a[i+1])nxt[i]=i+1;else nxt[i]=0; len=0; for(int i=1,st=1;i<=n;i++) { if(a[i]!=a[i+1]) { B[++len]={st,i}; st=i+1; } } while(len) { len2=0; for(int i=1;i<=len;i++) { printf("%d ",B[i].st); B[i].st=nxt[B[i].st]; if(B[i].st) { if(len2 && a[B2[len2].ed]==a[B[i].st]) { nxt[B2[len2].ed]=B[i].st; B2[len2].ed=B[i].ed; } else B2[++len2]=B[i]; } } printf("\n"); len=len2; for(int i=1;i<=len2;i++)B[i]=B2[i]; } return 0; }
- 1
信息
- ID
- 2019
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 50
- 已通过
- 18
- 上传者