2014网选ZOJPretty Poem(暴力枚举)

 /*       将给定的一个字符串分解成ABABA 或者 ABABCAB的形式!        思路:暴力枚举A, B, C串! */ 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<string>
 5
 6 using namespace std;
 7 string str;
 8 char ch[55];
 9 int main(){
10     int t;
11     scanf("%d", &t);
12     getchar();
13     while(t--){
14         char cc;
15         int cnt=0;
16         scanf("%c", &cc);
17
18         while(cc!=‘\n‘){
19             if((cc>=‘A‘ && cc<=‘Z‘ || cc>=‘a‘ && cc<=‘z‘))
20                 ch[cnt++]=cc;
21             scanf("%c", &cc);
22         }
23         ch[cnt]=‘\0‘;
24         str=string(ch);
25         int len=strlen(ch);
26         bool flag=false;
27         for(int i=1; i<len/2; ++i){
28             string A=str.substr(0, i);
29             for(int j=1; j<len/2; ++j){
30                 if(i+j>len/2) break;
31                 string B=str.substr(0+i, j);
32                 if(A==B) continue;
33                 int ll=i;
34                 int k=i+j, x;
35
36                 for(x=0; x<ll && k<len; ++k, ++x)
37                     if(A[x] != ch[k])
38                        break;
39                 if(x==ll){
40                     k=i+j+i;
41                     ll=j;
42                     for(x=0; x<ll && k<len; ++k, ++x)
43                           if(B[x] != ch[k])
44                            break;
45                     if(x==ll){
46
47                         ll=i;
48                         k=i+j+i+j;
49                         for(x=0; x<ll && k<len; ++k, ++x)
50                             if(A[x] != ch[k])
51                               break;
52                         if(x==ll && k==len)
53                            flag=true;
54                         if(!flag){
55                             k=i+j+i+j;
56                             ll=j;
57                             int m=len-1;
58                             for(x=ll-1; x>=0 && m>k; --m, --x)
59                                 if(B[x] != ch[m])
60                                     break;
61                             if(x==-1){
62                                 ll=i;
63                                 for(x=ll-1; x>=0 && m>k; --m, --x)
64                                     if(A[x] != ch[m])
65                                         break;
66                                 if(x==-1){
67                                    string C=str.substr(k, m-k+1);
68                                    if(A!=C && B!=C)
69                                       flag=true;
70                                 }
71                             }
72                         }
73                     }
74                 }
75             }
76         }
77         if(flag) printf("Yes\n");
78         else printf("No\n");
79     }
80     return 0;
81 } 
时间: 2024-10-13 12:21:32

2014网选ZOJPretty Poem(暴力枚举)的相关文章

2014 网选 5024 Wang Xifeng&#39;s Little Plot

题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话, 那么必须是 90度,或者没有转弯! 思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 ! step[i][j][k] 表示的是(i,j)沿着k方向一直走到头或者转弯时的最长步数! 最后枚举每一个可走点转弯为90度的路径,找到最长的长度! step[i][j][k1] + step[i][j][k2] 就是 (i, j)这个点 k1 和 k2方向构成90度! 1 #include<iostream

2014 网选 广州赛区 hdu 5023 A Corrupt Mayor&#39;s Performance Art

1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #define N 1000005 6 using namespace std; 7 8 int c[35]; 9 int tree[N*4];//正值表示该节点所管理的区间的颜色是纯色,-1表示的是非纯色 10 int n, m; 11 12 void buildT(int ld, int

ZOJ3818-Pretty Poem(暴力枚举)

题目链接 题意:求所给字符串是否符合ABABA或者ABABCAB的形式,如果可以的话输出Yes,不可以的话为No. 思路:暴力枚举A和B的长度,再用从长度减去3倍的AB长度,即为C的长度,看组合而成的字符串是否与给定的相等.在这里string中的substr函数是个好东西. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <a

2014 网选 5007 Post Robot(暴力或者AC_自动机(有点小题大作了))

//暴力,从每一行的开始处开始寻找要查询的字符 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char str[100005]; int main(){ while(gets(str)){ for(int i=0; str[i]; ++i) if(str[i]=='A'){ if(strstr(str+i, &quo

2014 网选 5014 Number Sequence(异或)

1 /* 2 题意:a, b两个序列,规定由[0, n]区间的数! 3 求 a[i] ^ b[i] 的和最大! 4 5 思路:如果数字 n的二进制有x位, 那么一定存在一个数字m,使得n^m的所有二进制位 6 都是1,也就是由x位1!这样下去的到的值就是最大值! 7 8 */ 9 #include<iostream> 10 #include<cstring> 11 #include<cstdio> 12 #include<algorithm> 13 #def

2014 网选 5011 Game(Nim游戏,数学题)

/* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #include<iostream> using namespace std; int main(){ int n, x, s; while(cin>>n){ s=0; while(n--){ cin>>x; s^=x; } if(s) cout<<"Win";//不是偶数 else cout<<"

2014 网选 上海赛区 hdu 5047 Sawtooth

题意:求n个'M'型的折线将一个平面分成的最多的面数! 思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1 也就是f(n) = (n*n + n +2)/2 对于一个'M'型的折线呢?它有四条线,但是由于三个顶点的关系导致划分的平面 的数目减少了9个!所以有递推公式 f(n) = (m*m + m + 2)/2 - 9*n; m = 4*n 最后 f(n) = (8*n+1)*(n-1)+2) 由于 n<=1e12 , 所以回报 long long!那么对于大于

2014 网选 5012 Dice(bfs模板)

1 /* 2 题意:就是给定两个筛子,每个筛子上6个面,每个面的数字属于[1,6], 且互不相同! 3 问a筛子最少经过按照题目规定的要求转动,达到和b筛子上下左右前后的数字相同! 4 5 思路:很直白的bfs,将每一种状态对应一个数字,保证这种状态不会重新加入队列中! 6 */ 7 #include<iostream> 8 #include<cstdio> 9 #include<cstring> 10 #include<algorithm> 11 #inc

蓝桥杯 2014本科C++ B组 奇怪的分式 暴力枚举

蓝桥杯 枚举 奇怪的分式 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子.分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的). 显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式. 但对于分子分母相同的情况