zoukankan      html  css  js  c++  java
  • HDU-2609-How many(最小表示法)

    思路:

    将输入的字符串转换成字典序最小的表示形式,存入set去重。用字典序最大的形式表示也是一样的;

    • 最小表示法
      Accepted 2609 62MS 3296K 804 B G++
      #include "bits/stdc++.h"
      using namespace std;
      char s[205];
      int n, m, k;
      set<string> st;
      // 求最小表示法 
      int getMin(char* s) {
          int i = 0, j = 1, k = 0;
          while (i < m && j < m && k < m) {
              int t = s[(i + k) % m] - s[(j + k) % m];
              if (t == 0) {
                  k++;
              } else {
                  if (t > 0) {
                      i += k + 1;
                  } else {
                      j += k + 1;
                  }
                  if (i == j) {
                      j++;
                  } 
                  k = 0;
              }
          }
          return min(i, j);
      }
      int main() {
          while (~scanf("%d", &n)) {
              while (n--) {
                  scanf("%s", s);
                  m = strlen(s);
                  k = getMin(s);
                  // 把s[k]前面的字符全部移到字符串末尾 
                  for (int i = 0; i < k; i++) {
                      s[m + i] = s[i];
                  }
                  s[m + k] = '';
                  // 字符串s + k就是原字符串的最小表示法 
                  st.insert(s + k);
              }
              printf("%d
      ", st.size());
              st.clear();
          }
          return 0;
      }
  • 相关阅读:
    向值栈放List集合
    向值栈放对象
    向值栈放数据
    wsgi初探
    python_swift_project_swift使用
    python_swift_project_middleware
    ubuntu 安装 swift
    20140905
    eventlet
    resource
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/10369125.html
Copyright © 2011-2022 走看看