hdu 3363 Ice-sugar Gourd
来源:互联网 发布:json文件示例 编辑:程序博客网 时间:2024/05/29 18:14
#include<stdio.h>#define N 100001int n;char ice[N];void solve(){ int i,t_tol=0,h_tol=0,h=0,t=0,m=n>>1; for(i=0;i<n;++i) if(ice[i]=='H') h_tol++; else t_tol++; if((h_tol%2)||(t_tol%2)) { printf("-1\n"); return ; } for(i=0;i<m;++i) if(ice[i]=='H') ++h; else ++t; if(h*2==h_tol&&t*2==t_tol) { printf("1\n%d\n",m); return ; } for(;i<n;++i) { if(ice[i]=='H') h++; else t++; if(ice[i-m]=='H') --h; else --t; if(h*2==h_tol && t*2==t_tol) { printf("2\n%d %d\n",i-m+1,i+1); return ; } } printf("-1\n");}int main(){ while(scanf("%d",&n)==1&&n) { scanf("%s",ice); solve(); } return 0;}/**解题大意:给你一个串,串中有H跟T两种字符,然后切任意刀,使得能把H跟T各自分为原来的一半。解题思路:把串想象成一个环,只要满足H跟T都为偶数个,那么就可以做一条过圆心的直线把H跟T平分掉,过直线,只要考虑平分H或者T中的一个就可以了,因为直线本来就把环平分,而此时平分了H或者T,那么剩下的那个也是平分掉的。代码:枚举每个位置*/