hdu 5455 Fang Fang

Posted moomight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5455 Fang Fang相关的知识,希望对你有一定的参考价值。

F题 Fang Fang

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5455

题意:F0 = f

   F1 = ff

   F2 = cff

   后面的每一个在前一个基础上加一个f

   求一个字符串首尾相连最少用多少个F可以表示完

思路:分有c和无c的情况,无c时则全部由F0 和F1 组成

有c时则考虑c后的f个数至少为2, 首尾的f可单独计数再比较(

代码:

技术图片
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cmath>
 5 #include <cstring>
 6 
 7 using namespace std;
 8 
 9 const int N = 1e6 + 10;
10 char str[N], ch[2];
11 
12 int main()
13 
14     int t,ca = 0, ans;
15     cin>>t;
16     while(t -- )
17         ca ++ ;
18         ans = 0;
19         printf("Case #%d: ", ca);
20         int flag1 = 0;//flag1首有多少f,flag3中有多少f
21         bool flag2 = false;//flag2:是否遇见c
22         scanf("%s", str);
23         gets(ch);
24         bool f = true;
25         int l = strlen(str);
26         for(int i = 0, j = 1; i < l; i += j, j = 1)
27             int flag3 = 0;
28 
29             if(!flag2 && str[i] == f) flag1 ++ ;
30             else flag2 = true;
31             if(flag2)
32                 while(str[i+j] == f)
33                     flag3 ++ ;
34                     j ++ ;
35                 
36                 if(flag3 <= 1 && i + j <= l - 1) f = false;
37 
38                 if((i == l - 1 && str[i] == c) || (i + j == l))
39                     if(flag3 + flag1 <= 1) f = false;
40                 
41                 if(!f) break;
42                 else ans ++ ;
43             
44             if(!flag2 && i == l - 1)
45                 if(flag1 % 2 == 1) ans = flag1 / 2 + 1;
46                 else ans = flag1 / 2;
47             
48         
49         if(f) printf("%d\n", ans);
50         else printf("-1\n");
51     
52     return 0;
53 
View Code

 

以上是关于hdu 5455 Fang Fang的主要内容,如果未能解决你的问题,请参考以下文章

fang定律

蜂窝网络TDOA定位方法的Fang算法研究及仿真纠错

JavaScript的引入fang

金中女神Ruby Fang

String中对字符串进行操作的一些fang

不是每个人都能穿Ruby Fang