1028. List Sorting (25)

1.根据要求,分别按照ID,姓名,分数排名。

2.这道题目使用C++的cin和cout均会超时;

3.需要使用scanf输入,printf输出;

4.使用char[]存储ID和name,使用strcmp进行比较,strcmp(a,b),当a<b,strcmp(a,b)<0;当a==b,strcmp(a,b)==0;当a>b,strcmp(a,b)>0

下面截图为部分实验结果:

1)程序仅执行cin输入数据,可以看出使用cin仅输入就耗费了137ms

2)程序仅执行cin和cout,最后一个测试点已经出现超时

3)最后使用scanf,printf,能够AC

时间限制
200 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

Excel can sort records according to any column. Now you are supposed to imitate this function.

Input

Each input file contains one test case. For each case, the first line contains two integers N (<=100000) and C, where N is the number of records and C is the column that you are supposed to sort the records with. Then N lines follow, each contains a record of a student. A student’s record consists of his or her distinct ID (a 6-digit number), name (a string with no more than 8 characters without space), and grade (an integer between 0 and 100, inclusive).

Output

For each test case, output the sorting result in N lines. That is, if C = 1 then the records must be sorted in increasing order according to ID’s; if C = 2 then the records must be sorted in non-decreasing order according to names; and if C = 3 then the records must be sorted in non-decreasing order according to grades. If there are several students who have the same name or grade, they must be sorted according to their ID’s in increasing order.

Sample Input 1

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60

Sample Output 1

000001 Zoe 60
000007 James 85
000010 Amy 90

Sample Input 2

4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98

Sample Output 2

000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60

Sample Input 3

4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90

Sample Output 3

000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90

 
AC代码:
[c language=”++”]
//#include<string>
//#include <iomanip>
#include<vector>
#include <algorithm>
//#include<stack>
#include<set>
#include<queue>
#include<map>
//#include<unordered_set>
//#include<unordered_map>
//#include <sstream>
//#include "func.h"
//#include <list>
#include<stdio.h>
#include<iostream>
#include<string>
#include<memory.h>
#include<limits.h>
using namespace std;
int check;
struct studentNode{
char id[7], name[8];
int grade;
};
bool cmpID(const studentNode&a, const studentNode&b)
{
return strcmp(a.id,b.id)<0;
}
bool cmpName(const studentNode&a, const studentNode&b)
{
if (strcmp(a.name, b.name)<0) return true;
else if (strcmp(a.name, b.name) == 0 && strcmp(a.id, b.id)<0) return true;
else return false;
}
bool cmpGrade(const studentNode&a, const studentNode&b)
{
if (a.grade < b.grade) return true;
else if (a.grade == b.grade && strcmp(a.id, b.id)<0) return true;
else return false;
}
bool cmp(const studentNode&a, const studentNode&b)
{
if (check == 1)
return cmpID(a, b);
else if (check == 2)
return cmpName(a, b);
else return cmpGrade(a, b);
}

int main(void)
{
int studentSum;
cin >> studentSum >> check;
studentNode *student=new studentNode[studentSum];
for (int i = 0; i < studentSum; i++)
{//scanf 输入char
scanf("%s %s %d", &student[i].id, student[i].name, &student[i].grade);
}
sort(student, student + studentSum, cmp);
for (int i = 0; i < studentSum;i++)
{
printf("%s %s %d\n", student[i].id, student[i].name, student[i].grade);
}
return 0;
}

[/c]

Leave a Reply

Your email address will not be published. Required fields are marked *