目錄
1,題目描述
題目大意
注意
2,思路
3,AC代碼
4,解題過程
第一搏
第二搏
1,題目描述

Sample Input:
6 6 7
01234 880
a1903 199
ydjh2 200
wehu8 300
dx86w 220
missing 400
ydhfu77 99
wehu8 55
ydjh2 98
dx86w 88
a1903 86
01234 39
ydhfu77 88
a1903 66
01234 58
wehu8 84
ydjh2 82
missing 99
dx86w 81
Sample Output:
missing 400 -1 99 99
ydjh2 200 98 82 88
dx86w 220 88 81 84
wehu8 300 55 84 84
題目大意
根據學生各個項目的分數排序,并對滿足資格的同學給出獲獎證書。
注意
- G must be rounded up to an integer:G要四舍五入;
- he/she must first obtain no less than 200 points from the online programming assignments, and then receive a final grade no less than 60 out of 100:程式設計成績要大于等于200且最終成績大于等于60,才有資格獲得證書;
- The final grade is calculated by G=(Gmid−term×40%+Gfinal×60%) if Gmid−term>Gfinal, or Gfinal will be taken as the final grade G:期中成績大于期末成績時,按照權重計算最終成績。否則取期末成績作為最終成績;
2,思路
接受每項的成績,并在map中記錄。周遊map将有資格的同學放入ans中,并對其排序。
3,AC代碼
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int Gp = -1, Gm = -1, Gf = -1, G = -1;//Gp:程式設計練習 Gm:期中成績 Gf:期末成績 G:最終成績
};
bool cmp1(node a, node b){
return a.G != b.G ? a.G > b.G : a.name < b.name;
}
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGE
int P, M, N, score;
string name;
scanf("%d%d%d", &P, &M, &N);
unordered_map<string, node> data;
vector<node> ans;
for(int i = 0; i < P; i++){
cin>>name>>score;
data[name].name = name;
data[name].Gp = score;
}
for(int i = 0; i < M; i++){
cin>>name>>score;
data[name].Gm = score;
}
for(int i = 0; i < N; i++){
cin>>name>>score;
data[name].Gf = score;
data[name].G = data[name].Gm > data[name].Gf ? (data[name].Gm*0.4+data[name].Gf*0.6+0.5) : (data[name].Gf);
}
for(auto it : data){
if(it.second.Gp >= 200 && it.second.G >= 60)
ans.push_back(it.second);
}
sort(ans.begin(), ans.end(), cmp1);
for(auto it : ans){
cout<<it.name<<' ';
//printf("%d %d %d %d\n", it.Gp, it.Gm==0 ? -1 : it.Gm, it.Gf==0 ? -1 : it.Gf, it.G);
printf("%d %d %d %d\n", it.Gp, it.Gm, it.Gf, it.G);
}
return 0;
}
4,解題過程
第一搏
了解題意後,感覺不是很難的模拟題。
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int Gp, Gm, Gf, G;//Gp:程式設計練習 Gm:期中成績 Gf:期末成績 G:最終成績
};
bool cmp1(node a, node b){
if(a.G != b.G) return a.G > b.G;
else return a.name < b.name;
}
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGE
int P, M, N, score;
string name;
scanf("%d%d%d", &P, &M, &N);
unordered_map<string, node> data;
vector<node> ans;
for(int i = 0; i < P; i++){
cin>>name>>score;
data[name].name = name;
data[name].Gp = score;
}
for(int i = 0; i < M; i++){
cin>>name>>score;
data[name].Gm = score;
}
for(int i = 0; i < N; i++){
cin>>name>>score;
data[name].Gf = score;
data[name].G = data[name].Gm > data[name].Gf ? (data[name].Gm*0.4+data[name].Gf*0.6+0.5) : (data[name].Gf);
}
for(auto it : data){
if(it.second.Gp >= 200 && it.second.G >= 60)
ans.push_back(it.second);
}
sort(ans.begin(), ans.end(), cmp1);
for(auto it : ans){
cout<<it.name<<' ';
printf("%d %d %d %d\n", it.Gp, it.Gm==0 ? -1 : it.Gm, it.Gf==0 ? -1 : it.Gf, it.G);
}
return 0;
}
第二搏
理論上應該是沒有問題的,唯一可疑的地方就是初始化那塊了。。。
于是我在結構體中直接将各個分數賦初值為-1:
666,不管怎樣以後一定要賦初值!這已經是第二次了。。。