您的位置:首页 > 理论基础 > 计算机网络

HDOJ 5455 Fang Fang(字符串)(沈阳网络赛)

2015-09-20 15:22 387 查看

Fang Fang

Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 518    Accepted Submission(s): 227


[align=left]Problem Description[/align]
Fang Fang says she wants to be remembered.

I promise her. We define the sequence F
of strings.
F0 = ‘‘f",
F1 = ‘‘ff",
F2 = ‘‘cff",
Fn = Fn−1 + ‘‘f", for n > 2

Write down a serenade as a lowercase string S
in a circle, in a loop that never ends.

Spell the serenade using the minimum number of strings in
F,
or nothing could be done but put her away in cold wilderness.
 

[align=left]Input[/align]
An positive integer T,
indicating there are T
test cases.

Following are T
lines, each line contains an string S
as introduced above.

The total length of strings for all test cases would not be larger than
106.
 

[align=left]Output[/align]
The output contains exactly
T
lines.

For each test case, if one can not spell the serenade by using the strings in
F,
output −1.
Otherwise, output the minimum number of strings in
F
to split S
according to aforementioned rules. Repetitive strings should be counted repeatedly.
 

[align=left]Sample Input[/align]

8
ffcfffcffcff
cffcfff
cffcff
cffcf
ffffcffcfff
cffcfffcffffcfffff
cff
cffc

 

[align=left]Sample Output[/align]
Case #1: 3
Case #2: 2
Case #3: 2
Case #4: -1
Case #5: 2
Case #6: 4
Case #7: 1
Case #8: -1
Hint
Shift the string in the first test case, we will get the string "cffffcfffcff"
and it can be split into "cffff", "cfff" and "cff".

注意:会出现cf之外的其他字符,这是当时写的 代码有点丑,见谅
ac代码:
 
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define INF 0xfffffff
using namespace std;
char s[1000100];
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int bz,n,v;
int cas=0;
int i,j,flag,num;
int sum;
scanf("%d",&n);
while(n--)
{
bz=0;
flag=0;
scanf("%s",s);
int len=strlen(s);
int q=0;
for(i=0;i<len;i++)
{
if(s[i]!='c'&&s[i]!='f')
{
bz=1;
break;
}
if(s[i]=='f')
q++;
}

printf("Case #%d: ",++cas);
if(q==len)
{
if(q%2)
printf("%d\n",q/2+1);
else
printf("%d\n",q/2);
continue;
}
if(bz)
{
printf("-1\n");
continue;
}
int num;
sum=0;
if(s[0]=='c')
{
v=1;
}
else
{
v=2;
}
for(i=0;i<len;)
{
if(s[i]=='f')
{
i++;
continue;
}
if(s[i]=='c')
{
num=0;
i++;
while(s[i]=='f'&&i<len)
num++,i++;
if(i==len)
{
if(v==2)
{
j=0;
while(s[j]=='f'&&j<len)
num++,j++;
}
}
if(num<2)
{
flag=1;
break;
}
else
{
sum++;
}
}
}
if(flag)
printf("-1\n");
else
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: