1. 程式人生 > >1085 PAT單位排行(25 分)//一把過

1085 PAT單位排行(25 分)//一把過

每次 PAT 考試結束後,考試中心都會發佈一個考生單位排行榜。本題就請你實現這個功能。

輸入格式:

輸入第一行給出一個正整數 N(≤10​5​​),即考生人數。隨後 N 行,每行按下列格式給出一個考生的資訊:

准考證號 得分 學校

其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別:B代表乙級,A代表甲級,T代表頂級;得分是 [0, 100] 區間內的整數;學校是由不超過 6 個英文字母組成的單位碼(大小寫無關)。注意:題目保證每個考生的准考證號是不同的。

輸出格式:

首先在一行中輸出單位個數。隨後按以下格式非降序輸出單位的排行榜:

排名 學校 加權總分 考生人數

其中排名

是該單位的排名(從 1 開始);學校是全部按小寫字母輸出的單位碼;加權總分定義為乙級總分/1.5 + 甲級總分 + 頂級總分*1.5整數部分考生人數是該屬於單位的考生的總人數。

學校首先按加權總分排行。如有並列,則應對應相同的排名,並按考生人數升序輸出。如果仍然並列,則按單位碼的字典序輸出。

輸入樣例:

10
A57908 85 Au
B57908 54 LanX
A37487 60 au
T28374 67 CMU
T32486 24 hypu
A66734 92 cmu
B76378 71 AU
A47780 45 lanx
A72809 100 pku
A03274 45 hypu

輸出樣例:

5
1 cmu 192 2
1 au 192 3
3 pku 100 1
4 hypu 81 2
4 lanx 81 2
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;

class sch{
public:
	double sum;
	int jiaquan;
	int zong;
	string name;
	sch(string &na):name(na),sum(0),zong(1){}
};

bool gr(sch &s1,sch &s2){
	if(s1.jiaquan!=s2.jiaquan)
		return s1.jiaquan>s2.jiaquan;
	else if(s1.zong!=s2.zong)
		return s1.zong<s2.zong;
	else
		return s1.name<s2.name;
}

int main(){
	//while(1){
	int n;
	scanf("%d",&n);
	string d,school;
	int fen,size;
	map<string,int> p;
	vector<sch> s;
	vector<sch>::iterator li;
	int j=1,temp;
	double x;
	while(n--){
		cin>>d>>fen>>school;
		size=school.length();
		transform(school.begin(),school.end(),school.begin(),::tolower);
		//這個transform函式要記得
		//轉換為大寫為:transform(school.begin(),school.end(),school.begin(),::toupper);
		if(d[0]=='B')
			x=1/1.5;//別寫成2/3,居然會得0。。。。。
		else if(d[0]=='A')
			x=1;
		else
			x=1.5;

		if(p[school]==0){
			s.push_back(school);
			s[j-1].sum+=fen*x;
			//cout<<j<<" "<<s[j-1].name<<" "<<s[j-1].sum<<" "<<s[j-1].zong<<endl;
			p[school]=j++;
		}else{
			temp=p[school]-1;
			//cout<<temp<<" "<<endl;
			s[temp].sum+=(double)fen*x;
			++s[temp].zong;
			//cout<<s[temp].name<<" "<<s[temp].sum<<" "<<s[temp].zong<<endl;
		}
	}
	for(int i=0;i<j-1;++i){
		s[i].jiaquan=s[i].sum;
	}
	sort(s.begin(),s.end(),gr);
	cout<<j-1<<endl;
	int x1,x2;
	for(int i=0;i<j-1;++i){
		if(i+1<j-1&&s[i].jiaquan==s[i+1].jiaquan){
			x2=i;
			while(i+1<j-1&&s[i].jiaquan==s[i+1].jiaquan){
				cout<<x2+1<<" "<<s[i].name<<" "<<s[i].jiaquan<<" "<<s[i].zong<<endl;
				++i;
			}
			cout<<x2+1<<" "<<s[i].name<<" "<<s[i].jiaquan<<" "<<s[i].zong<<endl;
		}else
			cout<<i+1<<" "<<s[i].name<<" "<<s[i].jiaquan<<" "<<s[i].zong<<endl;


	}


	//}
}

相關推薦

1085 PAT單位排行25 //一把

每次 PAT 考試結束後,考試中心都會發佈一個考生單位排行榜。本題就請你實現這個功能。 輸入格式: 輸入第一行給出一個正整數 N(≤10​5​​),即考生人數。隨後 N 行,每行按下列格式給出一個考生的資訊: 准考證號 得分 學校 其中准考證號是由 6 個字元組成的

PA乙級 1085 PAT單位排行 25

每次 PAT 考試結束後,考試中心都會發佈一個考生單位排行榜。本題就請你實現這個功能。 輸入格式: 輸入第一行給出一個正整數 N(≤105),即考生人數。隨後 N 行,每行按下列格式給出一個考生的資訊: 准考證號 得分 學校 其中准考證號是由 6 個字元組成的字串,其首字母表

1085 PAT單位排行 25

每次 PAT 考試結束後,考試中心都會發佈一個考生單位排行榜。本題就請你實現這個功能。(超時小霸王) #include<iostream> #include<string> #include<map> #include<set>

PAT 1085 PAT單位排行25

1085 PAT單位排行(25 分) 每次 PAT 考試結束後,考試中心都會發佈一個考生單位排行榜。本題就請你實現這個功能。 輸入格式: 輸入第一行給出一個正整數 N(≤105≤105​​ ),即考生人數。隨後 N 行,每行按下列格式給出一個考生的資訊:

PAT 1032 Sharing 25

1032 Sharing (25 分) To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let

1093 Count PAT's25

1093 Count PAT's(25 分) The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, a

PTA活用遞推類 1093 Count PAT's 25 ,1101 Quick Sort 25

思路 對於一類涉及序列的問題, 假如序列中每一位的值都可以通過“左右關係”計算得到,可以考慮所謂的“左右兩側的結果”是否可以通過遞推的預處理來得到,後面的計算就不用反覆求解。 ——演算法筆記 A1093 處理的是PAT三個字母之間的前後關係, 計數只與‘A’左右

PAT 1010 Radix 25

1010 Radix (25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes,

7-21排序 PAT排名彙總25

注:僅供交流使用,勿抄襲應付作業 #include<bits/stdc++.h> using namespace std; typedef long long ll; const in

PTA 7-21排序 PAT排名彙總25 25程式碼

排序, 每個考點排序,最後整體排序 結構體比較方便 (注:部落格作為交流使用,切勿抄襲應付作業) #include<bits/stdc++.h> using namespace std;

7-41 PAT排名彙總25

計算機程式設計能力考試(Programming Ability Test,簡稱PAT)旨在通過統一組織的線上考試及自動評測方法客觀地評判考生的演算法設計與程式設計實現能力,科學的評價計算機程式設計人才,為企業選拔人才提供參考標準(網址http://www.patest.cn)。 每次考試會在若干個不同的考點

PAT A1003 Emergency25 ----最短路徑

總結:這道題坑的地方在於求最大集結救援隊是值得一條最短路線上的所有節點之和,而不是所有最短路徑上的節點之和 深搜(dfs): 1.求路徑,點權,邊權。遍歷,最大連通子圖。 2.兩段程式碼分別使用深搜和dijkstra演算法解決的,有興趣可以兩端都看看,第二段程式碼比第一段快,遞迴程式消耗

7-4 PAT排名彙總 25

計算機程式設計能力考試(Programming Ability Test,簡稱PAT)旨在通過統一組織的線上考試及自動評測方法客觀地評判考生的演算法設計與程式設計實現能力,科學的評價計算機程式設計人才,為企業選拔人才提供參考標準(網址http://www.patest.cn)

PAT (Advanced Level) Practice 1085 Perfect Sequence 25

子序列而非連續子序列,雙指標,列舉最大值,然後l指標不斷往左移 #include<cstdio> #include<algorithm> using namespace std; const int N=1e5+5; int a[N]; int main

7-19 PAT Judge25

scrip use == minus then sel inpu style mit The ranklist of PAT is generated from the status list, which shows the scores of the submi

pat 1060 愛丁頓數25

從大到小 algorithm 英國 pri sin spa span iostream sel 英國天文學家愛丁頓很喜歡騎車。據說他為了炫耀自己的騎車功力,還定義了一個“愛丁頓數” E ,即滿足有 E 天騎車超過 E 英裏的最大整數 E。據說愛丁頓自己的 E 等於87。 現

PAT甲級 1002 A+B for Polynomials (25)25

pac list i++ lease find and for pan put 1002 A+B for Polynomials (25)(25 分) This time, you are supposed to find A+B where A and B are

PAT】B1005 繼續(3n+1)猜想25

tdi can scanf code ret return amp emp ++ #include<stdio.h> #include<algorithm> using namespace std; int Table[1000]={0}; bool

PAT】B1020 月餅 (25)25

() const tdi esp str 計算 struct stdio.h sca #include<stdio.h> #include<algorithm> using namespace std; const int maxn = 1000;

PAT】B1010 一元多項式求導25

mes sin ack turn sca for -- esp push #include<cstdio> #include<vector> using namespace std; struct duo{ int xishu,zhishu;