洛谷 P1309 瑞士轮 归并

【题解】洛谷P1309 瑞士轮(归并排序) 看了一眼数据大小,我们可以知道用快排肯定会TLE,自己手写模拟试了试,果真只得了60分,因此我们需要改进排序算法。 这里我们可以用归并排序(时间复杂度O(N)),归并排序的思想就是对两个有序的数组进行操作,然后开另一个数组为两个数组大小之和。设两个指针p1,p2,开始初始化为1。当两个指针中的任何一个没有到最后时,就比较指针所指的数,将更大的数进入第三个数组,然后把该数所在的原数组的指针后移,反... 阅读详情

洛谷 P1309 瑞士轮

https://www.luogu.com.cn/problem/P1309

每一轮快排,超时:

# include<iostream>
# include<fstream>
# include<vector> 
# include<algorithm> 
using namespace std;
class Athlete
{
public:
	int id,competence,score;
	Athlete(){}
	// 
	Athlete(int _id,int _competence,int _score):id(_id),competence(_competence),score(_score)
	{

	}
};

bool comp(const Athlete& _a, const Athlete& _b)
{
	if(_a.score>_b.score)
		return true;
	else if(_a.score<_b.score)
		return false;
	else
		return _a.id<_b.id;
}

int main()
{
	int N,R,Q;
//	ifstream infile("data.txt");
//	infile>>N>>R>>Q;
	cin>>N>>R>>Q;
	int* init_score_arr=new int[2*N];
	int* competence_arr=new int[2*N];
	vector<Athlete> athlete_vec;
	for(int i=0;i<2*N;++i)
		cin>>init_score_arr[i];
	for(int i=0;i<2*N;++i)
		cin>>competence_arr[i];
	for(int i=0;i<2*N;++i)
	{
		athlete_vec.push_back(Athlete(i,competence_arr[i],init_score_arr[i]));
	}
	sort(athlete_vec.begin(),athlete_vec.end(),comp);
	for(int round=0;round<R;++round)
	{
		for(int i=0;i<N;++i)
		{
			if(athlete_vec[2*i].competence<athlete_vec[2*i+1].competence)
				++athlete_vec[2*i+1].score;
			else
				++athlete_vec[2*i].score;
		}
		sort(athlete_vec.begin(),athlete_vec.end(),comp);
	}
	
	cout<<athlete_vec[Q-1].id+1<<endl;
	delete []init_score_arr;
	delete []competence_arr;
	return 0;
} 

每次比赛之后,分数按照降序排列,每两人中的赢的人都+1分,赢的N个人仍为降序,输的N个人也仍为降序,所以将赢的序列与输的序列归并即可。每轮O(n)复杂度。而快排每轮O(nlogn)。
用vector push_back出现超时,用new分配空间accepeted,应该是push_back太慢。

# include<iostream>
# include<fstream>
# include<vector> 
# include<algorithm> 
using namespace std;
class Athlete
{
public:
	int id,competence,score;
	Athlete(){}
	// 
	Athlete(int _id,int _competence,int _score):id(_id),competence(_competence),score(_score)
	{

	}
};

bool comp(const Athlete& _a, const Athlete& _b)
{
	if(_a.score>_b.score)
		return true;
	else if(_a.score<_b.score)
		return false;
	else
		return _a.id<_b.id;
}

int main()
{
	int N,R,Q;
//	ifstream infile("data.txt");
//	infile>>N>>R>>Q;
	cin>>N>>R>>Q;
	int* score_arr=new int[2*N];
	int* competence_arr=new int[2*N];
	int* rank_id_arr=new int[2*N];
	vector<Athlete> athlete_vec;
	for(int i=0;i<2*N;++i)
		cin>>score_arr[i];
	for(int i=0;i<2*N;++i)
		cin>>competence_arr[i];
	for(int i=0;i<2*N;++i)
	{
		athlete_vec.push_back(Athlete(i,competence_arr[i],score_arr[i]));
	}
	sort(athlete_vec.begin(),athlete_vec.end(),comp);
	for(int i=0;i<2*N;++i)
	{
		rank_id_arr[i]=athlete_vec[i].id;
	}
	int* winner_id_arr=new int[N];
	int* loser_id_arr=new int[N];
	for(int round=0;round<R;++round)
	{

		for(int i=0;i<N;++i)
		{
			int a_id=rank_id_arr[2*i];
			int b_id=rank_id_arr[2*i+1];
			int winner_id=-1;
			int loser_id=-1;
			if(competence_arr[a_id]<competence_arr[b_id])
			{
				++score_arr[b_id];
				winner_id=b_id;
				loser_id=a_id;
			}
			else
			{
				++score_arr[a_id];
				winner_id=a_id;
				loser_id=b_id;
			}
			winner_id_arr[i]=winner_id;
			loser_id_arr[i]=loser_id;
		}
//		printf("winner_id_vec: ");
//		for(int i=0;i<N;++i)
//			printf("%d, ",winner_id_vec[i]);
//		cout<<endl;
//		sort(athlete_vec.begin(),athlete_vec.end(),comp);
		//merge sort
		int winner_i=0;
		int loser_i=0;
		int i=0;
		while(winner_i<N&&loser_i<N)
		{
			int winner_id=winner_id_arr[winner_i];
			int loser_id=loser_id_arr[loser_i];
			int winner_score=score_arr[winner_id];
			int loser_score=score_arr[loser_id];
			bool comp_res=false;
			if(winner_score<loser_score)
				comp_res=true;
			else if(winner_score>loser_score)
				comp_res=false;
			else
				comp_res=(winner_id>loser_id);
			if(comp_res)
			{
				rank_id_arr[i]=loser_id;
				++i;
				++loser_i;
			}
			else
			{
				rank_id_arr[i]=winner_id;
				++i;
				++winner_i;
			}	
		}
		while(winner_i<N)
		{
			int winner_id=winner_id_arr[winner_i];
			rank_id_arr[i]=winner_id;
			++i;
			++winner_i;
		}
		while(loser_i<N)
		{
			int loser_id=loser_id_arr[loser_i];
			rank_id_arr[i]=loser_id;
			++i;
			++loser_i; 
		}
//		printf("rank: ");
//		for(int i=0;i<2*N;++i)
//			printf("%d, ",rank_id_arr[i]);
//		cout<<endl;
	}
	
	cout<<rank_id_arr[Q-1]+1<<endl;
	delete []winner_id_arr;
	delete []loser_id_arr;
	delete []score_arr;
	delete []competence_arr;
	delete []rank_id_arr;
	return 0;
} 
rbf神经网络python预测代码_RBF神经网络预测 %用RBF网络来预测股票走势clcclear%归一化数据input=[0 0 0 0 0 0.0277;0.0177 0.0292 0.0184 0.0122 0.0264 0.0492;0.0374 0.0946 0.0393 ... 阅读详情

相关推荐

网络流量监测技术

NetFlow是Cisco公司提出的网络数据包交换技术,该技术首先被用于网络设备对数据交换进行加速,并可同步实现对高速转发的IP数据流(Flow)进行测量和统计。  随着宽带互联网在中国 的迅速发展,全国各大电信运营商的网络规模都在不断扩张,网络结构日渐复杂,网络业务日趋丰富,网络流量高速增长。电信运营商需要通过可靠、有效的网络业 务流量监测系统对其网络以及网络所承载的各类业务进行及时、准

红杉树(ecitnet)的博客 5538

c++洛谷P1309 [NOIP2011 普及组] 瑞士轮

在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。本题中介绍的瑞士轮赛制,因最早使用于18951895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。

浪子回头 589

【C++】开源:ncurses终端TUI文本界面库

ncurses配置使用(TUI)

DevFrank的博客 3164

洛谷P1309瑞士轮解析

题目说了,如若实力相等,那么看编号,也就说明不存在平局的观念,你看,思路就出来了,先判断编号在判断实力,即。当然,如果要判定,就得请我们的sort来整理(虽然时间会炸,但我也没想到什么其他的了)循环——判定实力——计算和计入输赢——结算——输出,即。由于瑞士轮是多重赛,所以我们就可以用双循环来解决。好了,最后万事具备,只欠东风,把输出一点,于是我寻思着,自己去做,发现弄来弄去是。要节省时间,so,万能开头再定义结构。好,那么好,这样就可以开始下一步了,思路:输入——判定——合并——输出。

KL_ITI的博客 891

IDEA出现闪退或打不开的解决方法

本身项目比较大,为了打开这个软件,可调节IDEA中安装的bin目录下有个。打开IDEA的时候过一会便闪退,可以再IDEA的右下角看到如下提示。(如果没有该提示,软件右下角也会有个红色感叹号,点开查看原因即可)闪退的多数原因大致是out of memory,内存溢出。查看任务管理器中的进程:(发现内存随时有溢出的情况)但也需要注意,该参数并不是越大越好,适中即可。只有个别原因是需要管理员权限就可执行!可以尽量减少软件的启动。

码农研究僧的博客 5943

RT-DETR模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了RT-DETR模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 1764

洛谷P1309

在写本题前要搞清楚几个问题: 1.sort函数是以快速排序为基础的 2.快速排序和归并排序的区别是快速排序主要用于无序数列,而归并排序是可以用于有序数列的。就像两个有序数列合并时用归并排序最好。 3.提示:虽然本题我没有用STL,但是STL库中确实是有sort和merge两个排序的。 来分析本题: 本题是一道非常好的题,可以帮助我们更深的理解快速排序和归并排序的本质。 通常思路是,用结构体储存数据,在不同队伍进行比赛时,每一轮比赛都使用一次快速排序,最后输出我们需要的答案 如下列代码 ​

weixin_51658332的博客 418

SmartFusion从FPGA到ARM(一)——MSS_GPIO点灯

文章目录前言GPIO点灯 前言 GPIO点灯

whik1194的博客 5270

P1309 [NOIP2011 普及组] 瑞士轮————C++

选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。现给定每个选手的初始分数及其实力值,试计算在R 轮比赛过后,排名第$ Q$ 的选手编号是多少。每场比赛胜者得$1 $分,负者得 $0 $分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。对于$50% $的数据,$1 ≤ N ≤ 10,000 $;轮比赛结束后,排名第$ Q$ 的选手的编号。对于$30% $的数据,。

Kinght_123的博客 1739

基于 高斯过程回归(Gaussian Process Regression, GPR) 的 时间序列区间预测 的 MATLAB 示例代码

基于 高斯过程回归(Gaussian Process Regression, GPR) 的 时间序列区间预测 的 MATLAB 示例代码

算法如诗的博客 153

人员行为规范检测:YOLOv8+C#实现工厂车间安全监控,违规即报警零延迟

该方案通过YOLOv8的装备检测与姿态估计的动作识别,结合C#的实时管控能力,实现了从“被动巡检”到“主动预警”的转变。相比传统人工,违规响应速度提升10倍,全年可减少90%以上的安全隐患。方案已在3家制造企业落地,支持自定义违规规则(如新增“吸烟”“未系安全带”),可根据车间场景灵活扩展。需要完整的模型训练配置文件(含数据集增强脚本)或C#系统源码(视频处理+报警模块)的,评论区扣“SafetyDetect”,可直接获取部署版本~

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1174

【题解】【洛谷P1309】【归并排序】—— [NOIP2011 普及组] 瑞士轮

平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。总分相同的,约定编号较小的选手排名靠前。现给定每个选手的初始分数及其实力值,试计算在R 轮比赛过后,排名第$ Q$ 的选手编号是多少。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。

Pantheraonca的博客 2131

YOLO模型从10MB瘦到2MB!剪枝+INT8量化双方案(精度损失<1%,附部署代码)

摘要:本文介绍了一种针对边缘设备的YOLO模型轻量化方案,通过"结构化剪枝+INT8量化"组合技术,将YOLOv8n模型从6.4MB压缩至2MB,体积减少68.75%,推理速度提升80%,同时保持精度损失小于1%。文章详细讲解了剪枝工具选择、通道剪枝实现、量化校准等关键步骤,并提供了完整的代码示例。特别强调了剪枝保留率、校准集使用、微调必要性等实践要点,帮助开发者在树莓派等资源受限设备上实现高效目标检测。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 755

洛谷 P1309 瑞士轮(归并排序)题解

传送门:洛谷P1309瑞士轮   题目大意: 有2*N个人,进行R轮比赛,每次比赛先按累计得分多少排序,然后每相邻两人比赛,胜者得1分,输者不得分。问R轮比赛后排名第Q的人的编号是多少。   思路: 一开始我是对每轮比赛都用sort函数排序,最后输出排名第Q的人的编号,但是有4组数据超时了。 换个思路,因为是比分相邻的两个人比赛,胜者得分,输者不得分,所以N对比赛中的胜者依次排列起来...

zuzhiang的博客 806

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

洛谷P1309瑞士轮:归并排序优化实战与C++实现

归并排序是一种基于分治思想的高效排序算法,其核心操作是将两个有序序列合并为一个有序序列,时间复杂度为O(n)。在算法竞赛中,归并排序不仅用于全量排序,更常用于维护数据的有序性,例如在洛谷P1309瑞士轮问题中,每轮比赛后胜者组和败者组各自保持有序,通过归并合并可将每轮排序代价从O(n log n)降至O(n),从而避免超时。该技术广泛应用于需要频繁合并有序数据的场景,如多路归并、外部排序和数据库连接操作。本文以C++实现为例,深入解析如何利用归并排序思想优化瑞士轮模拟过程,帮助读者掌握排序算法在实战中的选择

weixin_42569329的博客 309

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

洛谷P1309 瑞士轮【归并排序】

题目链接:P1309 瑞士轮 程序说明: 卡了一个晚上,思路比较简单但是细节很多,有很多大坑! 每轮比赛结束后都需要对选手的成绩进行排序,这道题不能用STL的sort()或者手写快排进行排序,否则会超时(除非开o2优化)。看了题解之后才知道要用归并排序,于是手写归并结果还是超时。其实是没有掌握到归并的精髓。 这道题并不需要把归并排序的完整过程写出来(比如递归什么的…),否则和快排就一样了仍然会超...

cutlery1137的博客 1910

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【洛谷】P1309 瑞士轮(归并排序)

题目:https://www.luogu.org/problem/P1309 【题解】 ​ 最开始采用每轮比赛下来再用快排排序的方式,发现都超时了。 分析: 由题意可知每轮比赛下来,胜者们的排序一定是正确的,满足由大到小的顺序;而败者们的排序也一定是正确的,满足由大到小的顺序,由此得到两个有序的序列。 所谓的快排效率高,是针对随机的数列的,而这里每一轮比赛下来,有一半人的相对顺序已经确定了,...

Samven_7的博客 329

【归并排序】【洛谷P1309】 瑞士轮

题目背景 在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。 题目描述 2×N名编号为...

Z_sea的博客 497

洛谷 P1309 瑞士轮 归并排序

题目背景在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 本题中介绍的瑞士轮赛制,因最早使用于18951895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。 ...

b03188460的博客 209

【洛谷】P1309 瑞士轮 归并排序

P1309 瑞士轮 题目背景 在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 本题中介绍的瑞士轮赛制,因最早使用于18951895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。 题目描...

qq_29042389的博客 240

洛谷 P1309 瑞士轮(归并排序)

题目背景 在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 本题中介绍的瑞士轮赛制,因最早使用于18951895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。 题目描述 2 \t...

xiaolan7777777的博客 343

P1309 瑞士轮 来源洛谷 归并排序

题目描述2*N 名编号为 1~2N 的选手共进行R 轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1 名和第2 名、第 3 名和第 4名、……、第2K – 1 名和第 2K名、…… 、第2N – 1 名和第2N

happy 1351

洛谷P1309——瑞士轮(归并排序)

https://www.luogu.org/problem/show?pid=1309#sub 题目背景 在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名...

256

P1309 瑞士轮

https://www.luogu.org/problemnew/show/P1309 归并排序

Stydwn的博客 499

【洛谷 P1309】 【归并排序】 瑞士轮

【洛谷 P1309】 【归并排序】 瑞士轮 题目 解题思路 先快排将选手的初始得分排序 每一轮都给赢者和输者分成两个队列 给赢者加分 因为本来的序列就是降序的,所以分裂后的两个队列也是降序的 利用归并排序的思想将两个队列合并 得出每一轮结束后的排名 代码 #include<algorithm> #include<iostream> #include<cstdio> using namespace std; struct lzf{ int f,n,w; }a[20

Y的博客 301

洛谷 P1309 瑞士轮(归并)

题目链接:https://www.luogu.org/problemnew/show/P1309 题意:一共2n个人(有一个初始分数)进行k轮比赛,每轮比赛按当前得分排出名次,然后比赛按照第1名和第2名,第3和第4…第2n-1和2n进行(实力各不相同且实力大的总能获胜)。获胜方加一分,失败方分数不变。 思路: 一开始想在每轮比赛前用sort排序,算了下复杂度大概O(n*(n*logn)+n*...

elorole的博客 297
上一篇: UnboundLocalError: local variable ‘logs‘ referenced before assignment
下一篇: leetcode 189. Rotate Array
Ljosalfar
博客等级 码龄9年 0粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值