您的位置:首页 > 编程语言 > C语言/C++

C++:泛型编程(题库重整)

2016-01-26 15:46 375 查看

泛型编程(题库重整)

Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte

Total Submit:20 Accepted:10

Description

OJ由于在早期没有题目搜索功能,导致系统内出现了很多重复的题目,为了检查题目重复情况,crq需要统计出系统内哪些题目是重复的,现在就把这个任务交给你了。


Input

输入数据有多组组,每组数据的第1行是题库总量t,t<=10000。接下来有t行,每行有两个数据,分别为题号(题号从1001开始计直到最后一题,中间没有缺失)和标题(标题是一个字符串,可能包含空格)。

为简化问题,假设标题长度不超过20个字符,行末没有空格。

输入以EOF结束。


Output

请根据标题的字典序输出所有有重复的题目信息,每个信息占一行。

每行包括一个标题以及所有重复的题号,并按照题号的顺序从小到大排列。之间用空格分开。


Sample Input

5

1001 a+b

1003 humble number

1002 humble number

1004 hello world

1005 a+b

Sample Output

a+b 1001 1005

humble number 1002 1003

代码块:

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef struct prob
{

int nu;
char s[20];

}prob;
bool compare(const prob &a,const prob &b)
{
if (strcmp(a.s,b.s)<0)
return 1;
else if (strcmp(a.s,b.s)==0)
{
if (a.nu<b.nu)
return 1;
else  return 0;
}
else  return 0;
}
int main()
{
int t,j,i,n;
vector<prob> v1;
char c,s1[20];
prob p1;
while (scanf("%d",&t)!=EOF)
{
for (i=0;i<t;i++)
{
cin>>p1.nu;
c=getchar();
if(c==EOF)break;
gets(p1.s);
v1.push_back(p1);
}
sort(v1.begin(),v1.end(),compare);
for (i=0;i<t;)
{
strcpy(s1,v1[i].s);
if (strcmp(s1,v1[i+1].s)==0)
{
cout<<v1[i].s<<' '<<v1[i].nu<<' '<<v1[i+1].nu;
for (j=i+2;j<t;j++)
if (strcmp(s1,v1[j].s)==0)
cout<<' '<<v1[j].nu;
else
break;
i=j;
cout<<endl;
}
else i++;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: