題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3363
題意:一條字符串,只有H,T,切任意刀將H,T個分爲原來的一半。
因爲只有兩種字符,,,分成兩份,有一段一定連續,先判斷,前一半和後一半是否相等,相等切一刀,在討論兩刀。
代碼如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[100005];
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
int h=0;
getchar();
for(int i=0; i<n; i++)
{
scanf("%c",&a[i]);
if(a[i]=='H')
h++;
}
if(n%2!=0||h%2!=0)
{
printf("-1\n");
continue;
}
else
{
int cnt=0;
for(int i=0; i<n/2; i++)
{
if(a[i]=='H')
cnt++;
}
if(cnt==h/2)
{
printf("1\n");
printf("%d\n",n/2);
continue;
}
else
{
int hh[100005];
h=0;
for(int i=0; i<n; i++)
{
if(a[i]=='H')
h++;
hh[i]=h;
}
/*printf("-------%d\n",h);
for(int i=0; i<n; i++)
{
printf("%d ",hh[i]);
}
printf("------------\n");*/
for (int i=1; i<n/2; i++)
{
if ((hh[i+n/2-1]-hh[i-1])==h/2)
{
printf("2\n");
printf("%d %d\n",i,i+n/2);
break;
}
}
}
}
}
}