小z的班级平时分
该题目的收获:
1)二维数组加结构体模拟位置
2)把二维转成一维+sort
3)找最低分且名字字典序最小,就要从排好序的数组里从后往前遍历,如果遍历到下标 [ i ] 数组存的分数信息不等于最后一个下标存的分数信息,就输出下标【i+1】数组的信息即可
题目描述
http://www.tzcoder.cn/acmhome/problemdetail.do?method=showdetail&id=6468
样例
样例输入
3 3
ChenggongZheng SanZhang SiLi
FeihongHuang BaoyuJia DaiyuLin
None BaochaiXue XifengWang
5
1 1 2
1 3 3
2 1 1
2 3 3
1 1 2样例输出
ChenggongZheng 3
SanZhang -10
完整代码:
#include <bits/stdc++.h>
#include <unordered_set>
#include <algorithm>
using namespace std;
const int N=105;
struct node{
string s;
int num;
bool operator<(const node a) const{//重载比较
if(num!=a.num)
return num > a.num;
return s < a.s;
}
}b[N],a[N][N];//两个数组,b是为了把二维转成一维
int main(){
int n,m;
string s;
while(cin >>n >>m){
for(int i = 1;i <= n;i ++){
for(int j = 1;j <= m;j ++){
cin >>s;
a[i][j]={s,0};//开始每个数组赋值为0
}
}
int t;
cin>>t;
int e=0;
int id,x,y;
while(t--){
cin>>id>>x>>y;
if(id==1) a[x][y].num-=5;
else if(id==2) a[x][y].num+=3;
}
for(int i=1;i <= n;i ++){
for(int j=1;j<=m;j++){
if(a[i][j].s!="None")
b[e++]=a[i][j];// 两个数组,b是为了把二维转成一维
}
}
sort(b,b+e+1);
cout<<b[0].s<<" "<<b[0].num<<endl;
for(int i=e;i>=0;i--){//
if(i==0||b[e].num!=b[i].num){
if(b[e].num!=b[i].num) i++;
cout<<b[i].s<<" "<<b[i].num<<endl;
break;
}
}
}
return 0;
}