题意

原题

给出\(2n\)个\(\leq m\)的数,求最优的两两配对方案

使\(n\)组\((x,y)\)的\((x+y)mod \space m\)最大值最小

\(n\leq 10^5,m \leq 10^9\)

思路

排序后大胆猜测

发现结论是: 一定存在一种最优解,使得以某个位置为界,两边分别首尾匹配,且满足左边的每一对的和都\(<m\), 右边每一对的和都\(≥m\).

证明可以看题解,大概因为每一种别的形式的解都可以转化到它,一定的等价或更优的

这样子我们就容易得到\(O(n^2)\)的枚举+判断的写法

接着发现:

  • 界线越左,左边的每一对越容易变成第一类(数都变小了)。
  • 界线越左,右侧的每一对越难变第二类。
  • 在满足条件情况下,界线越左,最大值就越小。
  • 如果左边不满足,右边一定是满足(因为右边的数都比左边大加起来任然\(<m\),右边一定全部\(<m\))

也就是界线是可以二分的,所以就做完了

#include <bits/stdc++.h>
using std::max;
using std::min;
int n,m,a[200005],ans=0,Ans;
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n*2;i++)
scanf("%d",&a[i]);
std::sort(a+1,a+2*n+1);
int l=0,r=n;
while (l<=r){
int mid=(l+r)>>1;
bool f=true;
int t=mid<<1;
int ans=0;
if (f) for(int i=t+1,j=2*n;i<j;i++,j--)
if (a[i]+a[j]<m){
f=false;break;
}
if (f){
Ans=mid;
r=mid-1;
}else l=mid+1;
}
int t=Ans*2;
for (int i=1;i<=Ans;i++) ans=max(ans,a[i]+a[t-i+1]);
for(int i=t+1,j=2*n;i<j;i++,j--) ans=max(ans,a[i]+a[j]-m);
printf("%d\n",ans);
}

后记

连二分都能写错的我。。。

AGC032E modulo pairing的更多相关文章

  1. AtCoder AGC032E Modulo Pairing (二分、贪心与结论)

    题目链接 https://atcoder.jp/contests/agc032/tasks/agc032_e 题解 猜结论好题. 结论是: 按\(a_i\)从小到大排序之后,一定存在一种最优解,使得以 ...

  2. 「AGC032E」 Modulo Pairing

    「AGC032E」 Modulo Pairing 传送门 如果所有数都 \(<\lfloor \frac m 2\rfloor\),一个自然的想法是对所有数排序过后大小搭配,这样显然是最优秀的. ...

  3. Atcoder Grand Contest 032 E - Modulo Pairing(乱搞+二分)

    Atcoder 题面传送门 & 洛谷题面传送门 神仙调整+乱搞题. 首先某些人(including me)一看到最大值最小就二分答案,事实上二分答案对这题正解没有任何启发. 首先将 \(a_i ...

  4. Atcoder Grand Contest 032

    打的第一场Atcoder,已经知道会被虐得很惨,但没有想到竟然只做出一题-- 思维急需提升. A - Limited Insertion 这题还是很签到的. 感觉正着做不好做,我们反着来,把加数变为删 ...

  5. 【AtCoder】AGC032

    AGC032 A - Limited Insertion 这题就是从后面找一个最靠后而且当前可以放的,可以放的条件是它的前面正好放了它的数值-1个数 如果不符合条件就退出 #include <b ...

  6. cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)

    B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  7. codeforces 577B B. Modulo Sum(水题)

    题目链接: B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. POJ1995 Raising Modulo Numbers

    Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6373   Accepted: ...

  9. Question about pairing/bonding?

    Except that on android you can bypass the pairing dialog if you know the PIN in advance through a di ...

随机推荐

  1. 远程连接windows2003桌面无法使用剪切板的有效解决方法

    远程桌面控制服务器时,无法剪切.粘贴一些东西,上网搜了一下,原来是rdpclip.exe(remote desktop clipboard)不起作用了.此程序负责管理本地机与远程服务器之间共享剪切板, ...

  2. 【PR笔记】一、打造希区柯克变焦效果

    1. 导入素材,“链接选择项”关闭,删除音频 2. 添加效果--视频效果--扭曲--视频稳定器, 然后程序帮我们自动稳定 3.视频首尾添加关键帧,首帧缩放200%  尾帧不变, 使视频前后的主体大小差 ...

  3. LeetCode:596.超过5名学生的课

    题目链接:https://leetcode-cn.com/problems/classes-more-than-5-students/ 题目 有一个 courses 表 ,有: student (学生 ...

  4. configure.ac:91: error: possibly undefined macro: AC_SEARCH_LIBS

    debian系统上,手动编译tmux的时候,执行./autogen.sh出现如下报错: $ ./autogen.sh configure.ac:: error: possibly undefined ...

  5. jqGrid TreeGrid 加载数据 排序 扩展

    发现 jqGrid TreeGrid 加载的数据必须要排序 给了两种平滑数据模式尽然不内部递归 所以改了下源码加了个数据二次过滤器扩展 数据本该是这样的 结果没排序成这样了 (而且还得是从根节点到子节 ...

  6. Python 嵌套列表解析

    将一个3*4矩阵转为4*3矩阵Matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],]afterMatrix = [[row[i] for ro ...

  7. Mysql(九):Python连接MySQL数据库之pymysql模块使用

    Python3连接MySQL 本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用. PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服 ...

  8. 小白老凯,初出茅庐!请多关照!简单分享一些 mysql 数据库的安装操作!请给为大神雅正!

    在我们写代码,存储数据时常常会用到各种数据库,如:mysql.access.sql.server.Oracle等等,在这里就说一下mysql数据库的的操作指令! 首先我们了解下如何安装mysql数据库 ...

  9. React 入门与实战-课时7 虚拟DOM的本质和目的

    DOM树的概念: 一个网页呈现的过程: 1.浏览器请求服务器获取页面HTML代码 2.浏览器先在内存中,解析DOM结构,并在浏览器内存中,渲染出一颗DOM树: 3.浏览器把DOM树,呈现到页面上: R ...

  10. Centos6系统启动流程

    Centos6系统启动流程   一.CentOS 5和6的启动流程 Linux内核:存在于/boot分区,是整个操作系统的最底层,它负责整个硬件的驱动,以及提供各种系统所需的核心功能,包括防火墙机制. ...