hdu 5455 Fang Fang(字符串处理)
2016-06-06 16:07
316 查看
Fang Fang
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1317 Accepted Submission(s): 548
Problem Description
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.
Input
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.
Output
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 Saccording
to aforementioned rules. Repetitive strings should be counted repeatedly.
Sample Input
8
ffcfffcffcff
cffcfff
cffcff
cffcf
ffffcffcfff
cffcfffcffffcfffff
cff
cffc
Sample Output
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".
题意:串可以由f,ff,cff,或者cffffffffffffffffffffffff组成,串是循环串,合法则输出最少有几串,不合法输出-1
思路:直接处理
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
char str[1000010];
int main()
{
int T;
scanf("%d",&T);
for(int t=1; t<=T; t++)
{
scanf("%s",str);
int len=strlen(str);
int l=0,r=len-1,num=0;
if(len<3)
{
if(len==1&&str[0]=='f')
printf("Case #%d: 1\n",t);
else if(len==2&&str[0]=='f'&&str[1]=='f')
printf("Case #%d: 1\n",t);
else printf("Case #%d: -1\n",t);
continue;
}
if(str[l]=='f')
{
num=1;
while(r>=0&&str[r]=='f')
r--;
while(l<len&&str[l]=='f')
l++;
if(r<0)
{
printf("Case #%d: %d\n",t,len%2==0?len/2:len/2+1);
continue;
}
else if(r==len-1&&l==1)
{
printf("Case #%d: -1\n",t);
continue;
}
else if(l==r&&r==len-1)
{
printf("Case #%d: 1\n",t);
continue;
}
r--;
}
int flag=0;
while(l<=r)
{
num++;
if(str[l]=='c')
{
int q=0;
l++;
while(l<=r&&str[l]=='f')
{
q++;
l++;
}
if(q<2)
{
flag=1;
break;
}
if(l>r) break;
}
else
{
flag=1;
break;
}
}
if(flag) printf("Case #%d: -1\n",t);
else printf("Case #%d: %d\n",t,num);
}
return 0;
}
相关文章推荐
- 是什么造就了日本的高质量文化
- 深度学习FPGA实现基础知识6(Deep Learning(深度学习)学习资料大全及CSDN大牛博客推荐)
- Leetcode 90. Subsets II
- 树莓派 关闭屏保 / RaspberryPi turn off ScreenSaver / RaspberryPi disable screen off
- 字符串操作
- ibatis 返回自增主键值(MYSQL)
- 中断和异常的区别
- 3.Redis 学习(三)redis服务器集群、客户端分片
- Linux编辑器的选择使用
- ionic 上拉菜单(ActionSheet)实例代码
- org.w3c.dom(java dom)解析XML文档
- Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class com.squareup.okhttp.C
- android——
- Java JDBC 批处理插入数据操作
- 递归-完美覆盖(算法基础 第3周)
- 运算符专项练习
- ASP.Net MVC开发基础学习笔记(1):走向MVC模式
- LVS+keepalived配置
- C# bool类型转化为字符串首字母会大写
- Gstreamer rtspsrc 停止不发送teardown 命令