posts - 195, comments - 34, trackbacks - 0, articles - 1

          最小表示法

          Posted on 2009-11-02 18:13 小強摩羯座 閱讀(410) 評論(0)  編輯  收藏 所屬分類: 算法編程

          /*Problem: 1509  User: Uriel 
             Memory: 144K  Time: 16MS 
             Language: C  Result: Accepted
          */
           

          #include
          <stdio.h>
          #include
          <string.h>

          int min(int a, int b)
          {
              
          return a <= b ? a : b;
          }


          int MinimumRepresentation(char *s, int l)
          {
              
          int i = 0, j = 1, k = 0, t;
              
          while (i < l && j < l && k < l)
              
          {
                  t 
          = s[(i + k)%l] - s[(j + k)%l];
                  
          if (!t) ++ k;
                  
          else
                  
          {
                      
          if (t > 0) i = i + k + 1;
                      
          else j = j + k + 1;
                      
          if (i == j) ++j;
                      k 
          = 0;
                  }

              }

              
          return min(i,j);
          }


          int x,len,i,t;
          char str[10010];
          int main()
          {
              scanf(
          "%d",&t);
              getchar();
              
          while(t--)
              
          {
                  memset(str,
          0x00,sizeof(str));
                  scanf(
          "%s",str);
                  len
          =strlen(str);
                  x
          =MinimumRepresentation(str,len);
                  printf(
          "%d\n",x+1);
              }

              
          return 0;
          }


          //串的同構(gòu)是,在若干次循環(huán)位移后可以變成相同
              static boolean isIsomorphism(String s1, String s2)
              
          {
                  
          char[] u = (s1+s1).toCharArray();
                  
          char[] w = (s2+s2).toCharArray();
                  
                  
          int i = 0;
                  
          int j = 0;
                  
          int len = s1.length();
                  
          while(i < u.length && j < w.length)
                  
          {
                      
          int k = 0;
                      
          while((i+k) < u.length && (j+k)<u.length  && u[i+k] == w[j+k])k++;//&& k < len
                      System.out.println(k);
                      
          if(k >= len) return true;
                      
                      
          if(u[i+k] > w[j+k])i = i+k+1;
                      
          else j = j+k+1;
                  }

                  
          return false;
              }


          主站蜘蛛池模板: 巩义市| 大理市| 富宁县| 江华| 莱阳市| 交口县| 德化县| 将乐县| 广安市| 望江县| 怀宁县| 和田县| 饶平县| 武穴市| 新晃| 阳山县| 南汇区| 兴业县| 玉山县| 房山区| 顺昌县| 宁强县| 乌兰浩特市| 清水河县| 北海市| 庄浪县| 舒兰市| 临清市| 韶关市| 天水市| 宁城县| 明溪县| 通州市| 佳木斯市| 濮阳县| 庆元县| 中阳县| 清涧县| 龙里县| 阿拉善右旗| 蒙阴县|