hdu 2609 how many

最小表示法

n方複雜度寫的,看到別人O(n)的複雜度實現,但是自己還不太理解,先這樣吧

#include<iostream>
#include<map>
using namespace std;
string s;
string f(string str)
{
	int i=0,j=1;
	while(j<str.size())
	{
		if(str[i]>str[j]) i=j,j=i+1;
		else if(str[i]<str[j]) j++;
		else
		{
			int k=0;
			while(k<str.size()&&str[(i+k)%str.size()]==str[(j+k)%str.size()]) k++;
			if(k==str.size())
			{
				j++;
				continue;
			}
			if(str[(i+k)%str.size()]<str[(j+k)%str.size()]) j++;
			else i=j,j=i+1;
		}
	}
	return str.substr(i,str.size()-i)+str.substr(0,i);
}
int main()
{
	int n;
	while(cin>>n)
	{
		map<string,int>mapp;
		int sum=0;
		for(int i=0;i<n;i++)
		{
			cin>>s;
			s=f(s);
			if(mapp.find(s)==mapp.end())
			{
				mapp[s]=1;
				sum++;
			}
		}
		cout<<sum<<endl;
	}
	return 0;
} 

發佈了279 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章