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

          最小表示法

          Posted on 2009-11-02 18:13 小強(qiáng)摩羯座 閱讀(410) 評(píng)論(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;
              }


          主站蜘蛛池模板: 临高县| 舒兰市| 长阳| 南和县| 湖北省| 蛟河市| 黄骅市| 阳山县| 桐梓县| 韩城市| 红原县| 普格县| 屏山县| 贞丰县| 获嘉县| 临江市| 波密县| 湘阴县| 如皋市| 湟中县| 漳州市| 连山| 辽中县| 双江| 清新县| 边坝县| 徐州市| 文成县| 衡阳市| 临漳县| 洪泽县| 东安县| 韶关市| 江口县| 永胜县| 麻城市| 黑河市| 东安县| 太湖县| 东海县| 泽库县|