当前位置: 首页 > 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.wxhsa.cn/company.asp?id=2200

相关文章:

  • CF37C
  • CF33D
  • 支持类 Unix 语法 ``:Windows 下用 PowerShell 7 优化 npm 和 VS Code
  • 初赛程序阅读做题要点
  • 模拟堆(手写堆 的五大操作)
  • 【A】杂题悬桨
  • 使用Osquery进行远程取证:NTFS取证扩展实战指南
  • 完整教程:简单介绍一下Clickhouse及其引擎
  • 矩阵分解
  • 11
  • 基于 Gitlab 实现 Go 的 CI/CD
  • 2025.9.11
  • 容斥原理
  • 【B】世良真纯
  • 如何使用jobleap.cn避免简历中的严重错误
  • 在 Zustand 中创建通用 Action 的优雅实践
  • 如何用产品思维优化简历的“用户体验”?
  • 简历如何优化,简历如何投递,面试如何准备?
  • 网络流做题笔记
  • 简历优化全攻略:如何写出吸引HR的简历?
  • 重塑云上 AI 应用“运行时”,函数计算进化之路
  • 25.9.12 C语言基本数据类型
  • Avalonia:基础导航
  • bashrc的一些配置记录
  • H5游戏性能优化系列-----协议相关优化
  • 实现我的第一个langchain应用
  • 小说可视化系统设计(程序员副业项目)
  • MyEMS与开源浪潮:如何重塑全球能源管理的未来格局
  • React Antd or Antd Pro:findDOMNode is deprecated and will be removed in the next major release.
  • 单板挑战4路YOLOv8!米尔瑞芯微RK3576开发板性能实测