版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/NCUscienceZ/article/details/82959183
题目简单,但是自己暴露了不少小问题。
有一个语法错误好坑,卡了好久。
for(int j = 0; j<k; j++){
cin >> arr[++sum].id >> arr[sum].score;
arr[sum].local = i;
}
cin虽然是从前往后读的单竟然不是从前往后执行的,找这个错误找了好久。
自己最开始竟然忘记了集合里的元素不能直接修改。
还有在结构体内部重载一定要加const。题目根本水的不行,就是自己各种小错误。先练几个题找找手感,马上就得系统复习语法了。
#include <cstdio>
#include <iostream>
#include <set>
#include <stack>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
struct stu{
string id;
int score;
int rank;
int local;
int local_rank;
stu(string _id = "", int _score = 0, int _rank = 0, int _local = 0, int _local_rank = 0) : id(_id), score(_score), rank(_rank), local(_local), local_rank(_local_rank){
};
bool operator < (const stu &b) const {
if (score != b.score) return score > b.score;
else return id < b.id;
}
};
stu arr[50000];
stack<stu> local[200];
int sum = -1;
int n, k;
int main()
{
cin >> n;
for (int i = 1; i<=n; i++){
cin >> k;
for(int j = 0; j<k; j++){
cin >> arr[sum].id >> arr[++sum].score;
arr[sum].local = i;
}
}
sort(arr, arr+sum+1);
for (int i = 0; i<=sum; i++){
if (i == 0){
arr[i].rank = 1;
arr[i].local_rank = 1;
local[arr[i].local].push(arr[i]);
continue;
}
if (arr[i].score == arr[i-1].score){
arr[i].rank = arr[i-1].rank;
} else arr[i].rank = i+1;
if (local[arr[i].local].empty()){
arr[i].local_rank = 1;
local[arr[i].local].push(arr[i]);
}else{
if (arr[i].score == local[arr[i].local].top().score){
arr[i].local_rank = local[arr[i].local].top().local_rank;
local[arr[i].local].push(arr[i]);
}else{
arr[i].local_rank = local[arr[i].local].size()+1;
local[arr[i].local].push(arr[i]);
}
}
}
cout << sum+1 << endl;
for (int i = 0; i<=sum; i++){
cout << arr[i].id << ' ' << arr[i].rank << ' ' << arr[i].local << ' ' << arr[i].local_rank << endl;
}
return 0;
}