# 2 PAT排名汇总 (25分)注意 不要使用 long long int

### 输入样例:

```2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85```

### 输出样例:

```9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4```

# 改正后代码

```#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;
struct stu{
string id;
int score;
int kc;
int kcpm;
int zpm;
};
bool cmp0(stu s1,stu s2){
if(s1.kc==s2.kc){
return s1.score>s2.score;
}else return s1.kc<s2.kc;
}
bool cmp1(stu s1,stu s2){
if(s1.score!=s2.score){
return s1.score>s2.score;
}return s1.id<s2.id;
}
vector<stu>st;
int main(){
long long int n;
cin>>n;
for(int i=0;i<n;i++){
int p;
cin>>p;
for(int j=0;j<p;j++){
string a;
int b;
cin>>a>>b;
stu s;
s.id=a;
s.score=b;
s.kc=i+1;
st.push_back(s);
}
}
sort(st.begin(),st.end(),cmp0);
int count=1;
for(int i=0;i<st.size();i++){
if(i>0&&st[i].kc!=st[i-1].kc){
count=1;
}
st[i].kcpm=count++;
if(i>0&&st[i].kc==st[i-1].kc&&st[i].score==st[i-1].score){
st[i].kcpm=st[i-1].kcpm;
}
}
sort(st.begin(),st.end(),cmp1);
cout<<st.size()<<endl;
count=1;
for(int i=0;i<st.size();i++){
st[i].zpm=count++;
if(i>0&&st[i].score==st[i-1].score){
st[i].zpm=st[i-1].zpm;
}
cout<<st[i].id<<" "<<st[i].zpm<<" "<<st[i].kc<<" "<<st[i].kcpm<<endl;
}
return 0;
}```

# 改正前 long long int 数据代码

```#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;
struct stu{
long long int id;
int score;
int kc;
int kcpm;
int zpm;
};
bool cmp0(stu s1,stu s2){
if(s1.kc!=s2.kc){
return s1.kc>s2.kc;
}else {
return s1.score>s2.score;
}
}
bool cmp1(stu s1,stu s2){
if(s1.score!=s2.score){
return s1.score>s2.score;
}return s1.id<s2.id;
}
vector<stu>st;
int main(){
long long int n;
cin>>n;
for(int i=0;i<n;i++){
int p;
cin>>p;
for(int j=0;j<p;j++){
long long a,b;
cin>>a>>b;
stu s;
s.id=a;
s.score=b;
s.kc=i+1;
st.push_back(s);
}
}
sort(st.begin(),st.end(),cmp0);
int count=1;
for(int i=0;i<st.size();i++){
if(i>0&&st[i].kc!=st[i-1].kc){
count=1;
}
st[i].kcpm=count++;
if(i>0&&st[i].kc==st[i-1].kc&&st[i].score==st[i-1].score){
st[i].kcpm=st[i-1].kcpm;
}
}
sort(st.begin(),st.end(),cmp1);
cout<<st.size()<<endl;
count=1;
for(int i=0;i<st.size();i++){
st[i].zpm=count++;
if(i>0&&st[i].score==st[i-1].score){
st[i].zpm=st[i-1].zpm;
}
cout<<st[i].id<<" "<<st[i].zpm<<" "<<st[i].kc<<" "<<st[i].kcpm<<endl;
}
return 0;
}```

# 抄了一个大佬答案过了

```#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 30000+7, INF = 0x7f7f7f7f;
int T, n;
struct node {
string s;
int sc, id, st, fst;
}a[maxn];
bool cmp(node a, node b) {
if(a.sc == b.sc) return a.s < b.s;
return a.sc > b.sc;
}
int main() {
scanf("%d", &T);
int cnt = 0;
for(int i = 1; i <= T; ++i) {
scanf("%d", &n);
string s; int x;
for(int j = 0; j < n; ++j) {
cin >> s >> x;
a[cnt+j].s = s; a[cnt+j].sc = x; a[cnt+j].id = i;
}
sort(a+cnt, a+cnt+n, cmp);
a[cnt].st = 1;
for(int j = 1; j < n; ++j) {
if(a[cnt+j].sc == a[cnt+j-1].sc) a[cnt+j].st = a[cnt+j-1].st;
else a[cnt+j].st = j+1;
}
cnt += n;
}
sort(a, a+cnt, cmp);
cout << cnt << endl;
a[0].fst = 1;
cout << a[0].s << " " << a[0].fst << " " << a[0].id << " " << a[0].st << endl;
for(int i = 1; i < cnt; ++i) {
if(a[i].sc == a[i-1].sc) a[i].fst = a[i-1].fst;
else a[i].fst = i+1;
cout << a[i].s << " " << a[i].fst << " " << a[i].id << " " << a[i].st << endl;
}
return 0;
}
/*
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
*/```

0 条评论

• ### 【LeetCode程序员面试金典】面试题 10.01. Sorted Merge LCCI

You are given two sorted arrays, A and B, where A has a large enough buffer at t...

• ### 1053 住房空置率 (20 分)

版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。 ...

• ### linux添加定时任务crond

crontab –e : 修改 crontab 文件，如果文件不存在会自动创建。 crontab –l : 显示 crontab 文件。 crontab...

• ### 洛谷P1316 丢瓶盖

题目描述 陶陶是个贪玩的孩子，他在地上丢了A个瓶盖，为了简化问题，我们可以当作这A个瓶盖丢在一条直线上，现在他想从这些瓶盖里找出B个，使得距离最近的2个距离最大...

• ### IOS开发必须知道的3DLabel实现过程

最近写了很多关于SceneKit 的入门教程文章,初衷就是想给应用增加一点色彩,今天就教大家实现一个简单的3DLabel 的小框架.如果你的应用中需要实现3D字...

• ### Linux Top查看指定进程的CPU状态

语法是下面这样，进入到交互界面后，用法类似vi，然后按「q」可以退出，输入「？」再输入关键字，可以查询相关关键字：

• ### Linux Top查看指定进程的CPU状态

不管linux还是unix，大多数命令都是支持man命令来查看帮助信息的。 语法是下面这样，进入到交互界面后，用法类似vi，然后按「q」可以退出，输入「？」再...

• ### 简单的实现土味实时声音可视化

声音可视化顾名思义，就是把听到声音，通过视觉的方法呈现出来，人不仅可以听见声音，同时也可以看见。声音可视化最早是人们用来分析和了解声音的一种研究方式，不...

• ### 《JS正则表达式教程》汇总

正则表达式，又称规则表达式。（英语：Regular Expression，在代码中常简写为regex、regexp或RE），计算机科学的一个概念。正则表通常被用...