2011,3.13(纠结的四小时)
2016-01-15 00:00
232 查看
刚参加完HDUContest Ranklist,前所未有的纠结,也是前所未有的尝到了“不是努力的不够,而上效率的滞后”,一直在努力,一直期盼着能小试牛刀,一展身手。可谁想第一道题就给泼了冷水,貌似简单的面罩下隐藏着捉摸不透的不确定性因素,使劲浑身解数,最终以提交n次超时而结束,就这样抱着试试的心态开始看艰难的第二题。一看,简单!
当带着激动的心情迅速地拿出方案并顺利地写完后,这下总该给个a鼓励鼓励了吧,感觉是标准答案了,一提交,w; 后来改了数遍,也没想明白究竟是哪儿出了错,就在最后的十几分钟突然灵感一闪,原来错的很深啊,这也是这道题的关键所在,又是算法,又是效率。。。
看来需要改进的地方还很多,继续奋斗acm!
![](http://static.oschina.net/uploads/img/201601/15103725_EkBI.gif)
![](http://static.oschina.net/uploads/img/201601/15103725_pAah.gif)
View Code
当带着激动的心情迅速地拿出方案并顺利地写完后,这下总该给个a鼓励鼓励了吧,感觉是标准答案了,一提交,w; 后来改了数遍,也没想明白究竟是哪儿出了错,就在最后的十几分钟突然灵感一闪,原来错的很深啊,这也是这道题的关键所在,又是算法,又是效率。。。
看来需要改进的地方还很多,继续奋斗acm!
![](http://static.oschina.net/uploads/img/201601/15103725_EkBI.gif)
![](http://static.oschina.net/uploads/img/201601/15103725_pAah.gif)
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 }