EXCELソートHDU-1862


EXCELソート


Excelでは、レコードのセットを任意の指定された列でソートできます.プログラムを作成して類似の機能を実現してください.Inputテスト入力には、いくつかのテスト例が含まれています.各試験例の第1行は、2つの整数N(<=10000000)とCを含み、ここで、Nはレコードのストライプ数であり、Cは指定されたソートの列番号である.以下にN行あり、各行に学生記録が含まれている.各学生レコードは、学号(6桁の数字で、同じグループのテストで重複していない学号)、氏名(8桁を超えずスペースを含まない文字列)、成績(閉区間01000100内の整数)からなり、各項目間は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
#include
#include
#include
using namespace std;
struct node{
    char a[10];
    char b[10];
    int c;
}s[100005];         // , ;

bool cmp1(node i,node j){
    if(strcmp(i.a,j.a)<0) return true;
    else return false;

}                      // ;

bool cmp2(node i,node j){
    if(strcmp(i.b,j.b)<0)
        return true;
    if(strcmp(i.b,j.b)>0)
        return false;
    if(strcmp(i.b,j.b)==0)
        return cmp1(i,j);
}                    // , cmp1;

bool cmp3(node i,node j){
    if(i.creturn true;
    if(i.c>j.c)
        return false;
    if(i.c==j.c)
        return cmp1(i,j);

}                   // , cmp1;

int main()
{
    int N,C;
    int k=1;
    while(scanf("%d%d",&N,&C)&&N!=0){
        for(int i=0;iscanf("%s",s[i].a);
            scanf("%s",s[i].b);
            scanf("%d",&s[i].c);

        }
        printf("Case %d:
"
,k++); if(C==1){ sort(s,s+N,cmp1); } if(C==2){ sort(s,s+N,cmp2); } if(C==3){ sort(s,s+N,cmp3); } for(int i=0;iprintf("%s %s %d
"
,s[i].a,s[i].b,s[i].c); } } return 0; }