Aramic脚本

时间: 1ms        内存:128M

描述:

在Aramic语言中,单词只能代表对象
Aramic中的单词有以下特殊属性:
1. 如果一个单词不包含相同的字母,则该单词是根。
2. 一个根和他的所有排列表示一个单词
3. 例如 :“aaaa” , “aaa” ,”aa” 的根为”a”   “aabb”,”abab”,”baabb” 的根为”ab”
问脚本中提到的不同对象的数量是多少?

输入:

第一行为一个整数 n (1<=n <= 1000)。
第二行为n个单词,每个单词的长度不超过1000。 保证输入的单词由小写字母组成

输出:

输出一个整数,给定古代Aramic脚本中提到的不同对象的数量。

示例输入:

5
a  aa  aaa  ab  abb

示例输出:

2

提示:

参考答案(内存最优[2024]):

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;

int main()
{
        int T,n=0,sum=0;
        cin>>T;
        string s,str[1002];
        while(T--){
            cin>>s;
            sort(s.begin(),s.end());
        for(int i=1;i<s.length();i++){
            if(s[i]==s[i-1]){
                s.erase(i-1,1);
                i--;
            }
        }str[n++]=s;
        //cout<<"s :"<<s<<endl;
        }
        for(int i = 0;i<n;i++){
            if(str[i]!="000")
                sum++;
        else
            continue;
            for(int j = i+1;j<n;j++){
                if(str[i]==str[j]){
                    str[j]="000";
                }
            }
        }
        cout<<sum<<endl;
        return 0;
}

参考答案(时间最优[4]):

#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
string s;
int n;
int main()
{
	ios_base::sync_with_stdio(false);
	set<string> st;
	cin >> n;
	for (int i = 0;i < n;++i)
	{
		cin >> s;
		sort(s.begin(), s.end());
		s.erase(unique(s.begin(), s.end()), s.end());
		st.insert(s);
	}
	cout << st.size() << endl;
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。