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; }
相关文章推荐
- HTTP协议状态码详解(HTTP Status Code)
- http协议 知识点
- WebView(网络视图)
- Android --Fragment中异步HTTP请求
- Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传
- TCP/IP编程 - 1) 基础知识
- Linux系统网络基本配置
- httpd-2.2相关知识总结
- java基础-网络编程
- Linux 网络配置,ifconfig不显示ip地址的解决办法
- Android第三方异步网路加载库AsyncHttpClient内部实现缓存策略了吗?
- IOS 网络开发框架
- iOS 对网络图片进行黑白化处理
- TCP/IP(1)链路层
- http协议的post请求
- 基于X86平台的PC机通过网络发送一个int(32位)整数的字节顺序
- 计算机网络之路由器与分组交换
- 计算机网络之路由器与分组交换
- iOS开发工具-网络封包分析工具Charles
- 检查 CPU 是否支持二级地址转换 - 摘自网络