HDU 1862 EXCEL 정렬(구조 체 정렬)

EXCEL 정렬
Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16387    Accepted Submission(s): 6137
Problem Description
Excel 은 한 그룹의 기록 을 임의로 지정 한 열 에 따라 정렬 할 수 있다.지금 프로그램 을 작성 하여 유사 한 기능 을 실현 하 십시오.
Input
테스트 입력 은 약간의 테스트 용례 를 포함한다.각 테스트 용례 의 첫 번 째 줄 은 두 개의 정수 N(<=100000)과 C 를 포함 하 는데 그 중에서 N 은 기 록 된 개수 이 고 C 는 정렬 된 열 번 호 를 지정 합 니 다.다음은 N 줄 로 각 줄 에 학생 기록 이 하나씩 포함 되 어 있다.각 학생 기록 은 학 번(6 자리 숫자,같은 그룹 테스트 에서 중복 되 는 학 번 이 없 음),이름(8 자 를 넘 지 않 고 빈 칸 이 포함 되 지 않 은 문자열),성적(폐 구간[0,100]내의 정수)으로 구성 되 며 항목 마다 1 개의 빈 칸 으로 분리 된다.N=0 까지 읽 었 을 때 모든 입력 이 끝나 면 해당 결 과 는 출력 하지 마 십시오.
Output
모든 테스트 용례 에 대해 먼저 1 줄 의"Case i:"를 출력 합 니 다.그 중에서 i 는 테스트 용례 의 번호(1 부터)입 니 다.그 다음 에 N 줄 에서 요구 에 따라 정렬 한 결 과 를 출력 합 니 다.즉,C=1 일 때 학 번 에 따라 정렬 합 니 다.C=2 시 이름 의 비 체감 사전 순서에 따라 정렬 합 니 다.C=3 시 성적 의 비 체감 에 따라 정렬 합 니 다.몇몇 학생 들 이 같은 이름 이나 같은 성적 을 가지 고 있 을 때,그들의 학 번 에 따라 점차 순 위 를 매 긴 다.
Sample Input

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

Sample Output

   
   
   
   
Case 1: 000001 Zoe 60 000007 James 85 000010 Amy 90 Case 2: 000010 Amy 90 000002 James 98 000007 James 85 000001 Zoe 60 Case 3: 000001 Zoe 60 000007 James 85 000002 James 90 000010 Amy 90

Source
절 대 컴퓨터 대학원 재시험
문제 풀이:구조 체 정렬,c=1,c=2,c=3 시의 분류 조건 주의
AC 코드:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<algorithm>
#include<time.h>
typedef long long LL;
using namespace std;
struct stud
{
    int num;
    char name[10];
    int score;
} stu[100001];
int cmp1(stud a,stud b)
{
    return a.num<b.num;
}
int cmp2(stud a,stud b)
{
    if(strcmp(a.name,b.name)==0)
        return a.num<b.num;
    return strcmp(a.name,b.name)<0;
}
int cmp3(stud a,stud b)
{
    if(a.score==b.score)
        return a.num<b.num;
    return a.score<b.score;
}
int main()
{
    int n,c,cas=1;
    while((cin>>n>>c)&&(n||c))
    {
        memset(stu,0,sizeof(stu));
        for(int i=0; i<n; i++)
            scanf("%d %s %d",&stu[i].num,stu[i].name,&stu[i].score);
        if(c==1)
            sort(stu,stu+n,cmp1);
        else if(c==2)
            sort(stu,stu+n,cmp2);
        else if(c==3)
            sort(stu,stu+n,cmp3);
        printf("Case %d:
",cas++); for(int i=0; i<n; i++) printf("%06d %s %d
",stu[i].num,stu[i].name,stu[i].score); } return 0; }

좋은 웹페이지 즐겨찾기