zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    sqlserver 2005 数据库的差异备份与还原
    sqlserver安装教程
    hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
    解释器模式
    命令模式
    责任链模式
    3Sum Closest
    3sum
    代理模式
    外观模式
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/7997700.html
Copyright © 2011-2022 走看看