首页 > 其他分享 >[luogu2123] 皇后游戏

[luogu2123] 皇后游戏

时间:2024-11-10 16:08:16浏览次数:1  
标签:return 游戏 min int max hand peo 皇后 luogu2123

那她既然都说到老国王了,那肯定就是贪心了。

先声明两个引理:

引理1:若 \(\max(c,a)<\max(c,b)\) 时,定有 \(a<b\)。

引理2:\(\max(a,b)-a-b=-\min(a,b)\)。

证明就不说了,非常好证。

考虑 \(i,j\) 两大臣孰先孰后,假如 \(i\) 在前面更优,\(x\) 表示所有在他们前面的大臣的 \(\sum a\),\(y\) 表示在他们前面的第一名大臣的 \(c\) 值,则有:

\[\max(max(y,x+a_i)+b_i,x+a_i+a_j)+b_j<\max(max(y,x+a_j),x+a_j+a_i)+b_i \]

\[\max(y+b_i+b_j,x+a_i+b_i+b_j,x+a_i+a_j+b_j)<\max(y+b_i+b_j,x+a_j+b_i+b_j,x+a_i+a_j+b_i) \]

\[\max(x+a_i+b_i+b_j,x+a_i+a_j+b_j)<\max(x+a_j+b_i+b_j,x+a_i+a_j+b_i)(引理1) \]

\[\max(b_i,a_j)+a_i+b_j<\max(b_j,a_i)+a_j+b_i \]

\[\max(b_i,a_j)-b_i-a_j<\max(b_j,a_i)-b_j-a_i \]

\[-\min(b_i,a_j)<-\min(b_j,a_i)(引理2) \]

\[\min(b_i,a_j)>min(b_j,a_i) \]

到这里已经不能再化简了,但是该式不具有可传递性。

考虑按照 \(a_i\) 和 \(b_i\) 的大小关系进行分组,进行组内排序和组外排序:

  1. \(a_i<b_i\),此时原不等式等价于 \(a_i<a_j\),因此按 \(a\) 降序排序。
  2. \(a_i=b_i\),随便排就行。
  3. \(a_i>b_i\),此时原不等式等价于 \(b_i>b_j\),因此按 \(b\) 升序排序。

关于组外排序,若 \(i\) 属于第一组,\(j\) 属于第二组,则有 \(b_i>a_i\),成立,因此第一组在第二组前,化简原理类似于引理1。

同理,第二组在第三组前。

那直接排序,然后依题意模拟即可。时间复杂度 \(O(n\log n)\)。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
struct hand{
	int a,b;
}peo[20005];
int d(hand x){
	if(x.a==x.b) return 0;
	return ((x.a>x.b)?1:-1);
}int cmp(hand x,hand y){
	if(d(x)!=d(y)) return d(x)<d(y);
	if(d(x)>0) return x.b>y.b;
	return x.a<y.a;
}void solve(){
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>peo[i].a>>peo[i].b;
	sort(peo+1,peo+n+1,cmp);
	int s=0,c=0;
	for(int i=1;i<=n;i++){
		s+=peo[i].a;
		c=max(c,s)+peo[i].b;
	}cout<<c<<"\n";
}signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int t;cin>>t;
	while(t--) solve();
	return 0;
} 

标签:return,游戏,min,int,max,hand,peo,皇后,luogu2123
From: https://www.cnblogs.com/chang-an-22-lyh/p/18538127/luogu2123-huang_hou_you_xi-tj

相关文章

  • 在鸿蒙NEXT中开发一个2048小游戏
    本项目是基于api12开发的2048游戏,游戏的逻辑是当用户向某个方向滑动时,将该方向相邻且相等的数字相加,同时在空白区域的随机位置生成一个随机数字。游戏中的数字越大,分数越高。  首先,游戏的界面布局分别采用两个网格组件Grid来实现,难点在于上方的菜单栏是不均等的三种尺寸的组......
  • 如何简化App Store提现?——作为游戏开发者的跨境收款体验分享
    目录如何简化AppStore提现?——作为游戏开发者的跨境收款体验分享跨境收款常见的几个问题使用万里汇收款后的体验1.结算流程简单,到账更快2.多场景收付更灵活3.多种支付方式支持使用后的效果:资金管理更高效个人建议如何简化AppStore提现?——作为游戏开发者的跨......
  • 电脑提示xinput1_3.dll丢失怎么办?游戏DLL修复方法详解
    xinput1_3.dll是一个动态链接库(DLL)文件,它在Windows操作系统中扮演着重要的角色,特别是在处理游戏控制器和其他输入设备的交互方面。这个文件是MicrosoftDirectX软件包的一部分,DirectX是微软公司开发的一个多媒体编程接口集,广泛应用于PC游戏开发中,以实现高效的图形渲染、音频处......
  • win10玩游戏找不到d3dx9_43.dll丢失怎么解决,d3dx9_43.dll丢失五种解决方法
    d3dx9_43.dll是MicrosoftDirectX9的一个关键组件,具体而言,它是一个动态链接库(DLL)文件。DirectX是由Microsoft开发的多媒体编程接口,旨在优化Windows操作系统上游戏和多媒体应用程序的性能,特别是图形和声音功能。d3dx9_43.dll文件包含了Direct3D9的一些关键功能,如3......
  • 游戏搬砖项目号称单机曰产3张
    项目概述:本文档介绍的是一个工作室运营的游戏搬砖项目。该项目通过使用自动化脚本软件在游戏内执行任务和观看广告来收集游戏内材料,项目特点:自动化脚本:利用脚本软件全自动完成游戏内任务和观看广告,以收集游戏材料。详细教程:提供详细的操作教程,包括视频和文字说明,易于理......
  • 游戏搬砖项目号称单机曰产3张
    项目概述:本文档介绍的是一个工作室运营的游戏搬砖项目。该项目通过使用自动化脚本软件在游戏内执行任务和观看广告来收集游戏内材料,项目特点:自动化脚本:利用脚本软件全自动完成游戏内任务和观看广告,以收集游戏材料。详细教程:提供详细的操作教程,包括视频和文字说明,易于理......
  • 回合制游戏里的速度轴(有BUG)
    includeinclude<windows.h>usingnamespacestd;ints[4]={111,135,141,161};voidsetColor(intcolor){HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hConsole,color);}voidMarch(intt,intv)//输出函数;{if(v==s[0......
  • 【洛谷】P1427 小鱼的数字游戏
    题目描述小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字a(长度不一定,以 0 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问......
  • 运用python关于无界面版猜数游戏的设计与实现
    importrandom      这行代码导入了Python的 random 模块defguess_number_game():        number_to_guess=random.randint(1,100)  randint是random模块中的一个函数,用于生成                    ......
  • 视频分享——多款AI游戏外挂原理,深度解析,战斗力爆表!
    相关视频地址:多款AI游戏外挂原理,深度解析,战斗力爆表!强化学习算法library库:(集成库)https://github.com/Denys88/rl_gameshttps://github.com/Domattee/gymTouch个人github博客地址:https://devilmaycry812839668.github.io/......