当前位置: 首页 > news >正文

CF23C

挺神奇的思维题。

首先将所有元素按 \(a\) 从大到小排序,考虑交叉选,即要么 \(a_1,a_3,a_5,\cdots,a_{2n-1}\),要么 \(a_1,a_2,a_4,\cdots,a_{2n-2}\)。无论选哪种,\(a\) 一定满足要求(前者 \(a_1>a_2,a_3>a_4,\cdots,a_{2n-3}>a_{2n-2}\),各式相加即可,后者 \(a_2>a_3,a_4>a_5,\cdots,a_{2n-2}>a_{2n-1}\),同理)。那么只需要考察对应 \(o\) 的情况,若一组不可以(即不到一半),那么另外一组一定可以(总和一定),所以一定有解,直接排序输出即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 200010
#define int long long
using namespace std;
struct P{int a,b,id;
}c[N];
int n,s1,s2,s,ans[N];
bool cmp(P x,P y){return x.a>y.a;
}
void solve(){s=s1=s2=0;cin>>n;for(int i=1;i<=n*2-1;i++)cin>>c[i].a>>c[i].b,s+=c[i].b,c[i].id=i;sort(c+1,c+n*2-1+1,cmp);for(int i=1;i<=n*2-1;i+=2)s1+=c[i].a,s2+=c[i].b;cout<<"YES\n";if(s2>=s-s2){for(int i=1,j=1;i<=n*2-1;i+=2,j++)ans[j]=c[i].id;}else{ans[1]=c[1].id;for(int i=2,j=2;i<=n*2-1;i+=2,j++)ans[j]=c[i].id;}sort(ans+1,ans+n+1);for(int i=1;i<=n;i++)cout<<ans[i]<<' ';cout<<'\n';
}
signed main(){int T;cin>>T;while(T--)solve();return 0;
}
http://www.zskr.cn/news/3255.html

相关文章:

  • CF37C
  • 支持类 Unix 语法 ``:Windows 下用 PowerShell 7 优化 npm 和 VS Code
  • 初赛程序阅读做题要点
  • 模拟堆(手写堆 的五大操作)
  • 完整教程:简单介绍一下Clickhouse及其引擎
  • 矩阵分解
  • 容斥原理
  • 简历优化全攻略:如何写出吸引HR的简历?
  • bashrc的一些配置记录
  • MyEMS与开源浪潮:如何重塑全球能源管理的未来格局
  • doms.ul.querySelectorvs document.querySelector:DOM查询的层级关系
  • Pwn2Own Automotive 2025 决赛日:49个零日漏洞与88万美元奖金揭晓
  • MyEMS在行动:揭秘开源能源管理系统如何重塑工业与楼宇的能效未来
  • 题解:P14015 [ICPC 2024 Nanjing R] 生日礼物
  • HyperWorks许可回收机制
  • flutter开发window打包成exe可执行文件的步骤
  • 基于Linux系统的定制软件安装硬件设备选型指南
  • c++之is_trivially_default_constructible
  • 猫树分治
  • AI导航生成寻路点-FindPathToLocationSynchronously
  • 智聘无界:AI 破解全球化招聘合规、成本与人才匹配难题的实践路径
  • Flink 与Flink可视化平台StreamPark教程(CDC功能)
  • GAS_Aura-Setting Up Auto Running
  • 源码调试-带你了解下车牌识别的深度学习模型-LPRNet
  • charles破解-在线生成激活码
  • 内部排序-直接插入排序冒泡排序快速排序对比
  • C++ auto关键字
  • ARM主板:低功耗高性能的嵌入式计算核心
  • Gin 模板系统深度解析:客服系统实战开发
  • 系统盘爆了,.vscode,.android占内存太多,使用mklink命令符号链接