Աշակերտների ցուցակի սորտավորում

Ենթադրենք մենք ցանկանում ենք նախորդ խնդրի աշակերտների ցուցակը սորտավորել ըստ երեք առարկաների միավորների գումարի։ struct-ների զանգվածը հարմար է նրանով, որ եթե կիրառում ենք պղպջակի ալգորիթմը, ապա կարող երկու զանգվածի երկու տարրերի արժեքները կարող ենք տեղերով փոխել երեք վերագրումների կամ swap ֆունկցիայի միջոցով, ճիշտ այնպես, ինչպես դա անում ենք int տիպի զանգվածների հետ։
Բայց սորտավորելու համար մենք կարող ենք կիրառել նաև գրադարանային sort ֆունկցիան, միայն թե դրա համար պետք է սահմանել մի ֆունկցիա, որի միջոցով կարողանանք sort-ին փոխանցել այն տեղեկությունը, թե երկու տարրեր համեմատելիս, որը համարել փոքր։
Օրինակ, եթե Point տիպի p զանգվածը ցանկանանք սորտավորել ըստ x կոորդինատների, ապա դա կարող ենք անել հետևյալ կերպ.
bool cmp(const Point& a, const Point& b)
{
    return a.x < b.x;
}
int main()
{
   . . .
   sort(p, p+n, cmp);
Կամ մյուս տարբերակը՝ կարելի է սահմանել operator< ֆունկցիա․
bool operator<(const Point& a, const Point& b)
{
    return a.x < b.x;
}
int main()
{
   . . .
   sort(p, p+n);
Սա կոչվում է գործողության ծանրաբեռնում։ operator< ֆունկցիա սահմանելուց հետո Point տիպի երկու a և b փոփոխականների միջև կարելի է կիրառել < գործողությունը։
Վարժություն՝
Դպրոցի աշակերտները մասնակցել են մաթեմատիկա, ֆիզիկա և ինֆորմատիկա առարկաների մրցույթներին։ Հայտնի են բոլորի արդյունքները։ Հարկավոր է ցուցակը սորտավորել միավորների գումարների նվազման կարգով և արտածել այն։
Մուտքային տվյալներ
Առաջին տողում տրված է մրցույթներին մասնակցած աշակերտների n (1 ≤ n ≤ 1000) քանակը։ Հաջորդ n տողերից յուրաքանչյուրում տրված է մեկ աշակերտի տվյալներ՝ անունը, ազգանունը, գրանցած միավորը մաթեմատիկայից, ֆիզիկայից և ինֆորմատիկայից։
Ելքային տվյալներ
Պետք է արտածել աշակերտների ցուցակը, նույն ձևաչափով, միավորների գումարների նվազման կարգով։ Եթե երկու աշակերտ միավորների նույն գումարն ունեն, ավելի շուտ պետք է արտածել այն աշակերտի տվյալները, ում ազգանունը բառարանային կարգով ավելի շուտ է հանդիպում, եթե ազգանուններն էլ նույնն են, պետք է համեմատել անունները։ Համարել, որ ցուցակում միևնույն անուն ազգանունով երկու աշակերտներ չկան։
Օրինակ
մուտք
ելք
3 Hayk Khachatryan 18 18 4 Aram Hakobyan 18 10 19 Ani Sargsyan 12 10 20
Aram Hakobyan 18 10 19 Ani Sargsyan 12 10 20 Hayk Khachatryan 18 18 4
 

Constraints

Time limit: 0.2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue