洛谷题解 P2799 【国王的魔镜】

  • A+
所属分类:代码笔记 信息技术

本质上与判断回文相同。不用递归,循环就行。

用一个循环不停地恢复,每次取一半,终止的条件(不能再恢复了)是:

(长度变为了奇数 || 不对称了)就输出当前长度。

  1. #include<iostream>  
  2. #include<cstring>  
  3. using namespace std;  
  4. int main()  
  5. {  
  6.     char a[100002];  
  7.     int l,i;  //l:当前项链长度。i:循环变量。   
  8.     cin>>a;  
  9.     l=strlen(a);  //求当前项链长度。   
  10.     while(1)  //此循环用来不停地折半   
  11.     {  
  12.         if(l%2==1){  //判断奇偶   
  13.             cout<<l<<endl;  
  14.             return 0;  
  15.         }  
  16.         for(i=0;i<l;i++)  //此循环用来确定是否对称   
  17.         {  
  18.             if(a[i]!=a[l-i-1]){  
  19.             cout<<l<<endl;  
  20.             return 0;  
  21.             }  
  22.         }  
  23.         l/=2;  //折半恢复一次   
  24.     }  
  25. }  
xcc

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: