LOJ#3095. 「SNOI2019」字符串 贪心
当相邻字母不相同的时候做法显然,相同的时候将相同区间提取出来,然后按照不同做就行.
code:
#include <bits/stdc++.h> #define ll long long #define N 1000006 #define setIO(s) freopen(s".in","r",stdin) using namespace std; char str[N]; int p[N]; int main() { // setIO("input"); int n; scanf("%d",&n); int i,j,s=1,t=n; scanf("%s",str+1); for(i=1;i<=n;i=j) { j=i; while(str[i]==str[j]&&j<=n) ++j; // i 到 j-1 都与 i 相同. if(j==n+1) { for(int k=i;k<j;++k) p[s]=k,++s; } else { if(str[j-1]-'a'<str[j]-'a') { for(int k=j-1;k>=i;--k) { p[t]=k,--t; } } else { for(int k=i;k<j;++k) { p[s]=k,++s; } } } } for(i=1;i<=n;++i) printf("%d ",p[i]); return 0; }