C++:泛型编程(题库重整)
2016-01-26 15:46
375 查看
泛型编程(题库重整)
Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal 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; }
相关文章推荐
- C++事件处理中__event与__raise关键字的用法讲解
- C++面试题(一)
- C++:泛型编程 map(统计人数)
- C++ 模板与泛型(2)
- C++:泛型编程 map(查询成绩)
- C++ 模板与泛型(1)
- 使用String逐个赋值字符
- C++事件处理中的__hook与__unhook用法详解
- C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲
- c++ sort()qsort()
- c/c++ 英语专业词汇表
- 为setup.py添加c:c++ 头文件或者库的搜索路径
- 深入浅出Windows 10 通用应用开发学习笔记(C++) 3-1
- Boost 学习之算法篇 is_partitioned
- XML文件的解析、读取和生成(C/C++、win7、VS2010)
- 详解C++编程中断言static_assert的使用
- C++下std::pair的使用?
- 一种动态开辟二维数组的办法
- Google C++编程风格指南(三)之作用域的相关规范
- Google C++编程风格指南(三)之作用域的相关规范