1. 程式人生 > 其它 >洛谷P1786 幫貢排序 題解

洛谷P1786 幫貢排序 題解

技術標籤:ajax快速排序icpc運維排序演算法

幫貢排序 - 洛谷

description:

一種神奇的排序方式。


solution:

仔細做即可,注意處理多個屬性相同時編號的先後。

code:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
map<string,int>mp;
struct ben
{
	string Name;
	int
Pos; int c; int lev; int id; string qaq; }a[10005],b[1005]; int cmp(const ben &a,const ben &b) { if(a.c==b.c)return a.id<b.id; return a.c>b.c; } int cmp2(const ben &a,const ben &b) { if(mp[a.qaq]==mp[b.qaq])return a.lev>b.lev; return mp[a.qaq]<mp[b.qaq]; } int cmp3(const
ben &a,const ben &b) { if(mp[a.qaq]==mp[b.qaq]) { if(a.lev==b.lev)return a.id<b.id; return a.lev>b.lev; } return mp[a.qaq]<mp[b.qaq]; } int main() { int n; scanf("%d",&n); string tmp; mp["BangZhu"]=1; mp["FuBangZhu"]=2; mp["HuFa"
]=3; mp["ZhangLao"]=4; mp["TangZhu"]=5; mp["JingYing"]=6; mp["BangZhong"]=7; string aaa; int cnt=0,sum=0; for(int i=1;i<=n;i++) { cin>>aaa>>tmp; if(tmp=="BangZhu"||tmp=="FuBangZhu") { cnt++; scanf("%d%d",&b[cnt].c,&b[cnt].lev); b[cnt].Name=aaa; b[cnt].Pos=mp[tmp]; b[cnt].qaq=tmp; b[cnt].id=i; } else { a[++sum].Name=aaa; scanf("%d%d",&a[sum].c,&a[sum].lev); a[sum].Pos=mp[tmp]; a[sum].id=i; } } sort(b+1,b+cnt+1,cmp3); for(int i=1;i<=cnt;i++) { cout<<b[i].Name<<' '<<b[i].qaq<<' '<<b[i].lev<<endl; } sort(a+1,a+sum+1,cmp); for(int i=1;i<=2;i++) { a[i].qaq="HuFa"; } for(int i=3;i<=6;i++) { a[i].qaq="ZhangLao"; } for(int i=7;i<=13;i++) { a[i].qaq="TangZhu"; } for(int i=14;i<=38;i++) { a[i].qaq="JingYing"; } for(int i=39;i<=n;i++) { a[i].qaq="BangZhong"; } sort(a+1,a+sum+1,cmp3); for(int i=1;i<=sum;i++) { cout<<a[i].Name<<' '<<a[i].qaq<<' '<<a[i].lev<<endl; } return 0; }