[cpp] 描述:根據題目所給公式進行計算就可以了,完全不需要用到哈希判重 #include <cstdio> #include <cstring> char str[210]; int flag,count[15]; void bfs() { int len=strlen(str),n=0,max=0; for(int i=0; i<len; i++) if(str[i]<='z'&&str[i]>='a') { int j,c(0); for(j=i; j<len; j++) if(str[j]>='a'&&str[j]<='z') c=c*32+str[j]-'a'+1; else break; i=j; if(!n||(n&&max>c)) max=c; count[n++]=c; } while(1) { flag=0; for(int i=0; i<n-1; i++) for(int j=i+1; j<n; j++) { int modi=(max/count[i])%n; int modj=(max/count[j])%n; if(modi==modj) { modi=(max/count[i]+1)*count[i]; modj=(max/count[j]+1)*count[j]; max=modi > modj ? modj : modi; flag=1; } } if(!flag) { printf("%d\n\n",max); return; } } } int main() { #ifndef ONLINE_JUDGE freopen("a.txt", "r", stdin); #endif while(gets(str)) { puts(str); bfs(); } return 0; }