刚参加完HDUContest Ranklist,前所未有的纠结,也是前所未有的尝到了“不是努力的不够,而上效率的滞后”,一直在努力,一直期盼着能小试牛刀,一展身手。可谁想第一道题就给泼了冷水,貌似简单的面罩下隐藏着捉摸不透的不确定性因素,使劲浑身解数,最终以提交n次超时而结束,就这样抱着试试的心态开始看艰难的第二题。一看,简单!
当带着激动的心情迅速地拿出方案并顺利地写完后,这下总该给个a鼓励鼓励了吧,感觉是标准答案了,一提交,w; 后来改了数遍,也没想明白究竟是哪儿出了错,就在最后的十几分钟突然灵感一闪,原来错的很深啊,这也是这道题的关键所在,又是算法,又是效率。。。
看来需要改进的地方还很多,继续奋斗acm!
View Code
1 #include"iostream"
2 using namespace std;
3 char a[110],b[110];
4 int i,j,k;
5 int L1;
6 int mark=0;
7 int yy[1000],ss[1000];
8 void Xun_huan() //实现一次循环
9 {
10 char ch=a[0];
11 int ss=yy[0];
12 for(int q=0;q<=L1-1;q++)
13 {
14 a[q]=a[q+1];
15 yy[q]=yy[q+1];
16 }
17 a[L1-1]=ch;
18 yy[L1-1]=ss;
19 }
20 void X_Sub() //将序列一分为二
21 {
22 char c[110],d[110];
23
24 for(i=0; i<L1/2; i++)
25 c[i]=a[i];
26
27 int k=0;
28 for(i=L1-1,k=0;i>=L1/2+1; i--,k++ )
29 d[k]=a[i];
30
31 int flag=0;
32 int s=0;
33 for(i=0, s=0; i<L1/2, s<k; s++,i++)
34 {
35 if(c[i]==d[s]) flag++;
36 }
37 if(flag==L1/2) mark=1;
38 }
39 int main()
40 {
41 while(scanf("%s",a)!=EOF,a[0]!='#')
42 {
43
44 char xx;
45 mark=0;
46 L1=strlen(a);
47 if(L1%2==0) cout<<"NO"<<endl; //排除偶数的情况
48 else
49 {
50 int mark1=0;
51 int fuck=0;
52 for(i=0;i<L1;i++)
53 {
54 if(a[i]==a[i+1]) fuck++;
55 }
56 if(fuck+1==L1) cout<<"YES"<<" "<<L1/2<<endl; //字符相同时
57 else
58 {
59 strcpy(b,a);
60 for(int r=0;r<L1;r++)
61 {
62 yy[r]=r; //用于记录循环后的位置
63 ss[r]=r; //用于保存起始位置
64 }
65 for(int p=0;p<L1;p++)
66 {
67 xx=a[L1/2];
68 X_Sub();
69 if(mark==1) break;
70 else Xun_huan();
71 }
72 if(mark==1)
73 {
74 cout<<"YES"<<" ";
75 for(i=0;i<L1;i++)
76 if(b[i]==xx)
77 {
78 cout<<yy[L1/2]<<endl; break;
79 }
80 }
81 else cout<<"NO"<<endl;
82 }
83 }
84 }
85 return 0;
86 }