F1的影响力越来越大,因此国际汽联决定扩大规模,让更多有天赋的车手加入这一行列。
不过规模的扩大带来了一系列问题,比如排名系统。由于参赛人数过多,排名系统要运行很久才能够得出结果。
车迷们非常愤怒,强烈要求修改系统。于是,汽联召开紧急会议,决定在短期内重新编写该系统。
F1排名的标准是:每场比赛的前八名可获得积分,从第一名到第八名分别获得:10,8,6,5,4,3,2,1个积分,车手总积分是该车手各场比赛获得的积分之和。每场比赛过后,排名系统都会将当前的车手总积分从大到小排序,若积分相等则编号小的车手排在前面。
你的任务就是要编写这一系统。不过车迷们常常只关注第一名,因此,你只需在每场比赛过后输出排名第一的车手的编号即可。
第一行是两个整数n,m(8<=n<=1000000,1<=m<=1000000),分别表示车手数和比赛场数。接下来m行,每行八个整数,第i行第j个是rij(1<=rij<=n),表示第i场比赛获得第j名的车手的编号。
m行,第i行是一个整数ci,表示第i场比赛结束后排名第一的车手的编号。
14 3
1 4 14 8 10 6 12 7
4 6 14 8 3 11 1 13
1 11 14 8 10 3 9 12
1
4
1
30%的数据满足n<=1000,m<=1000
出题人没有丰富的展现,于是我就没加 KATEX
我的思路是存一个最大值,每次参与评分的选手才有可能会改变最大值,所以每次比较最大值和八个参与评分选手的分数。
但好像不对
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[1000005];
int sum[9]={0,10,8,6,5,4,3,2,1};
int tempMax,tempMaxID;
int Max,MaxID;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
tempMax=0;
for(int j=1;j<=8;j++)
{
int x;
cin>>x;
a[x]+=sum[j];
if(tempMax<a[x])
{
tempMaxID=x;
tempMax=a[x];
}
}
if(Max<tempMax)
{
Max=tempMax;
MaxID=tempMaxID;
}
cout<<MaxID<<'\n';
}
return 0;
}