标签:
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3363
思路:有解:两种情况。第一种,中间一分刚好,即切一刀。第二种,将第一个与最后一个连接起来,组成一个圆,过圆心将圆分成两部分,总有一种方式符合题意。枚举起点i,判断sum[i+n/2]-sum[i]是否等于H/2即可。
#include<cstdio> #include<vector> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn=1e5+50; int n,H,T; //int sumt[maxn]; int sumh[maxn]; char st[maxn]; int main() { //freopen("in.in","r",stdin); //freopen("out.out","w",stdout); while(scanf("%d",&n)==1&&n) { H=0,T=0; memset(sumh,0,sizeof(sumh)); //memset(sumt,0,sizeof(sumt)); scanf("%s",st+1); for(int i=1; i<=n; i++) { if(st[i]=='H') H++; else T++; sumh[i]=H; } if((H%2)||(T%2)||(n&1)) { printf("-1\n"); continue; } if(sumh[n/2]==H/2) printf("1\n%d\n",n/2); else for(int i=1; i<=n/2; i++) { if(sumh[i+n/2]-sumh[i]==H/2) { printf("2\n%d %d\n",i,i+n/2); break; } } } return 0; }
标签:
原文地址:http://blog.csdn.net/wang2147483647/article/details/52068884