pdoj-统计名字

xiaoxiao2021-02-27  292

1762: 统计名字

题目描述

度熊所居住的 D 国,是一个完全尊重人权的国度。以至于这个国家的所有人命名自己的名字都非常奇怪。一个人的名字由若干个字符组成,同样的,这些字符的全排列的结果中的每一个字符串,也都是这个人的名字。

例如,如果一个人名字是 ACM,那么 AMC, CAM, MAC, MCA, 等也都是这个人的名字。在这个国家中,没有两个名字相同的人。

度熊想统计这个国家的人口数量,请帮助度熊设计一个程序,用来统计每一个人在之前被统计过多少次。

输入

这里包括一组测试数据,第一行包含一个正整数N,接下来的N 行代表了 N个名字。N 不会超过100,000,他们的名字不会超过40位. 输出

对于每输入的一个人名,输出一个整数,代表这个人之前被统计了多少次。 样例输入

5 ACM MAC BBA ACM BAB

样例输出

0 1 0 2 1

–提示:用每一个名字所含字母的个数来区分名字。

#include<iostream> #include<cstring> #include<cstdio> using namespace std; int same(int a[],int b[])//判断两个名字是否相同 { int t,z=1; for(t=0;t<26;t++) { if(a[t]!=b[t])z=0; } return z; } struct name { int a[30];//用来装每一字母的个数 int b; }q[100010]; int main() { int n; char na[40]; int i,j; cin>>n; for(i=0;i<n;i++) { cin>>na;//将输入的名字暂存在na[]数组里 q[i].b=0; memset(q[i].a,0,sizeof(q[i].a));//将数组的初始数值都置为0 int l=strlen(na); for(j=0;j<l;j++)//统计名字中每个字母的个数 { q[i].a[na[j]-'A']++; } for(j=0;j<i;j++) { if(same(q[i].a,q[j].a)==1) { q[i].b++; } } } for(i=0;i<n;i++) { cout<<q[i].b<<endl; } return 0; }
转载请注明原文地址: https://www.6miu.com/read-6213.html

最新回复(0)