• HDU 2609 How Many


    最大最小表示法与去重

    可以发现,题目中是求不同构环的数目,我们可以采用最大最小表示法,将它们都最大/最小表示出来,再判断有几个不同的,
    可以使用string类,操作较为简单,也可以使用自定义struct 二维字符数组,
    去重可以使用 sort+unique 可以使用 set 也可以字符串哈希

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <string>
    using namespace std;
    const int MAXN=205;
    string s[10005];
    int n;
    void MINR(int temp){
    	int i=0,j=1;int len=s[temp].length() ;
    	s[temp]+=s[temp];
    	while(i<len&&j<len){
    		int k=0;
    		while(s[temp][i+k]==s[temp][j+k]&&k<len) k++;
    		if(k==len) break;
    		if(s[temp][i+k]>s[temp][j+k]) i=max(i+k+1,j+1);
    		else j=max(j+k+1,i+1);
    	}
    	int ans=min(i,j);
    	s[temp].assign(s[temp],ans,len);
    }
    int main(){
    	freopen("in.txt","r",stdin);
    	while(cin>>n){
    		for(int i=1;i<=n;i++){
    			cin>>s[i];
    			MINR(i);
    			//cout<<s[i]<<endl;
    		}
    		sort(s+1,s+n+1);
    		int ans=unique(s+1,s+n+1)-s-1;
    		cout<<ans<<endl;
    	}
    	
    	fclose(stdin);
    	return 0;
    }
    
  • 相关阅读:
    @RequestParam方式传入list
    编写优美代码的七条规范(Python版)
    汇编程序设计入门
    CSP-S2020解题报告(待完成!)
    [USACO18JAN]MooTube
    DP优化
    AFO记
    考前总结
    清北学堂周末刷题班第五场
    清北学堂考前综合刷题班第四场
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/7997700.html
Copyright © 2020-2023  润新知