HDU - 3374 (最大表示法与最小表示法+求循环节 )
2017-11-01 23:35
357 查看
题目链接: HUD-3374
剩下的就是最小表示法和最大表示法的裸题了!!
最大表示法和最小表示法详解:最大表示法和最小表示法
对了!还有就是char数组千万不要用cin输入,这样时间会大大增加!!
题目大意:
给你一个字符串,问这个字符串经过移动后的字典序最小的字符串的首字符位置和字典序最大的字符串的首字符的位置,和能出现多少次最小字典序的字符串和最大字典序的字符串解题思路:
能出现多少次,就要看循环节有多少个了 !!剩下的就是最小表示法和最大表示法的裸题了!!
最大表示法和最小表示法详解:最大表示法和最小表示法
对了!还有就是char数组千万不要用cin输入,这样时间会大大增加!!
#include<bits/stdc++.h> using namespace std; const int MAX_N = 1e6+9; char str[MAX_N]; int nxt[MAX_N]; void make_next(char * str) { int len = strlen(str); memset(nxt,0,sizeof(nxt)); nxt[0] = 0; for(int i=1,k=0;i<len;i++) { while(k>0 && str[k] != str[i]) { k = nxt[k-1]; } if(str[k] == str[i]) k++; nxt[i] = k; } } int getMin(char * str) { int len = strlen(str); int i=0,j=1; int k=0; while(i<len && j<len) { int t = str[(i+k)%len] - str[(j+k)%len]; if(!t) k++; else { if(t>0) { if(i+k+1 > j) i = i+k+1; else i = j+1; } else if(j+k+1 > i) j = j+k+1; else j = i+1; k=0; } if(k>=len) break; } return i<j?i:j; } int getMax(char * str) { int len = strlen(str); int i =0,j=1; int k=0; while(i<len && j<len) { int t = str[(i+k)%len] - str[(j+k)%len]; if(!t) k++; else { if(t<0) { if(i+k+1 > j) i = i+k+1; else i = j+1; } else if(j+k+1 > i) j = j+k+1; else j = i+1; k=0; } if(k>=len)break; } return i<j?i:j; } int main() { while(~scanf("%s",str)) { make_next(str); int len = strlen(str); int cir = len - nxt[len-1]; int num = len / cir; cout<<getMin(str)+1<<" "<<num<<" "<<getMax(str)+1<<" "<<num<<endl; } }
相关文章推荐
- hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)
- HDU - 3374 String Problem(最小表示法和最大表示法)
- hdu 3374 String Problem (kmp+最大最小表示法)
- String Problem - HDU 3374 (kmp+最大最小表示)
- String Problem HDU - 3374(字符串的最大最小表示)
- HDU 3374 String Problem (KMP+最大最小表示)
- HDU 3374 String Problem (KMP+最大最小表示法)
- HDU 3374 String Problem (KMP+最小最大表示)
- HDU 3374 String Problem (KMP+最大最小表示)
- HDU 3374 String Problem(最大最小表示法 模板题)
- HDU 3374 String Problem (KMP+最大最小表示)
- hdu 3374 String Problem(KMP+字符串最小最大表示)
- HDU 3374 String Problem (KMP+最大最小表示)
- String Problem HDU - 3374 (最大最小表示法)
- HDU 3374 String Problem (KMP+最大最小表示)
- hdu 3374 String Problem (kmp+最大最小表示法)
- HDU 3374 String Problem(最大最小表示法模板+KMP+next数组的运用)
- HDU 3374 String Problem (KMP+最大最小表示)
- hdu 3374 String Problem (最大最小表示法)
- HDU 3374 String Problem (KMP+最大最小表示)