玄关求助站外题
  • 板块学术版
  • 楼主shy_lihui
  • 当前回复2
  • 已保存回复4
  • 发布时间2024/12/28 23:48
  • 上次更新2024/12/29 12:48:50
查看原帖
玄关求助站外题
1053122
shy_lihui楼主2024/12/28 23:48

【问题描述】

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\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;
}
2024/12/28 23:48
加载中...