BZOJ3416 Poi2013 Take-out

来源:互联网 发布:天下3捏脸数据女 编辑:程序博客网 时间:2024/04/27 12:39

我们把c看成-k,b看成1,那么我们搞一个栈,从前往后扫,每次如果当前往前长度k+1和为0就说明可以消掉,然后倒序输出

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<cmath>#include<algorithm>#include<iomanip>#include<vector>#include<map>#include<set>#include<bitset>#include<queue>#include<stack>using namespace std;#define MAXN 1000010#define MAXM 1010#define INF 1000000000#define MOD 1000000007#define eps 1e-8#define ll long longint n,k;char a[MAXN];int st[MAXN],tp;int s[MAXN];vector<int>ans[MAXN];int tot;int main(){int i,j;scanf("%d%d%s",&n,&k,a+1);for(i=1;i<=n;i++){s[i]=s[i-1]+(a[i]=='c'?-k:1);st[++tp]=i;if(tp>k&&s[st[tp-k-1]]==s[i]){j=k+1;tot++;while(j--){ans[tot].push_back(st[tp--]);}}}for(i=tot;i;i--){for(j=ans[i].size()-1;~j;j--){printf("%d ",ans[i][j]);}printf("\n");}return 0;}/**/


0 0
原创粉丝点击