这道题其实可以用暴力水过qwq

首先可以知道一个暴力做法如下,具体地来说可以用调整法证明其正确性,但是过不了所有的点。

#pragma GCC optimize (2)
#pragma G++ optimize (2)
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <vector>
#define MAXN 200005
using namespace std;
int A[MAXN], B[MAXN];
int l;;
inline int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
inline int max(int a, int b)
{return a > b ? a : b;
}
inline int min(int a, int b)
{return a < b ? a : b;
}
inline int calc(int a, int b)
{int dis = a > b ? a - b : b - a;return min(dis, l - dis);
}
int num1[MAXN],num2[MAXN];
int main()
{int n;n=read(),l=read();for (register int i = 0; i < n; ++i){A[i]=read();}for (register int i = 0; i < n; ++i){B[i]=read();}sort(A, A + n);sort(B, B + n);int minmax = 0x7fffffff;for (register int i = 0; i <n; ++i){int maxn = -0x7fffffff;for (register int j = 0; j <n; ++j){maxn = max(maxn, calc(A[j], B[(i + j >= n) ? (i + j - n) : (i + j)]));}minmax = min(minmax, maxn);}printf("%d\n", minmax);return 0;
}

然后,我们有一个比较显然的优化:如果当前最大值已经比最小的最大值要大的话,就break掉。

#pragma GCC optimize (2)
#pragma G++ optimize (2)
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <vector>
#define MAXN 200005
using namespace std;
int A[MAXN], B[MAXN];
int l;;
inline int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
inline int max(int a, int b)
{return a > b ? a : b;
}
inline int min(int a, int b)
{return a < b ? a : b;
}
inline int calc(int a, int b)
{int dis = a > b ? a - b : b - a;return min(dis, l - dis);
}
int num1[MAXN],num2[MAXN];
int main()
{int n;n=read(),l=read();for (register int i = 0; i < n; ++i){A[i]=read();}for (register int i = 0; i < n; ++i){B[i]=read();}sort(A, A + n);sort(B, B + n);int minmax = 0x7fffffff;for (register int i = 0; i <n; ++i){int maxn = -0x7fffffff;for (register int j = 0; j <n; ++j){maxn = max(maxn, calc(A[j], B[(i + j >= n) ? (i + j - n) : (i + j)]));if (maxn >= minmax){break;}}minmax = min(minmax, maxn);}printf("%d\n", minmax);return 0;
}

但是,显然这个程序在随机数据下表现良好,但是会被一些特殊数据卡掉。。。比如说这个程序就T在了第24个点

什么?你要写二分?too young too naive!如果数据不是随机的,我们就“构造”出随机的数据,比如说,用random_shuffle优化枚举顺序

#pragma GCC optimize (2)
#pragma G++ optimize (2)
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <vector>
#define MAXN 200005
using namespace std;
int A[MAXN], B[MAXN];
int l;;
inline int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
inline int max(int a, int b)
{return a > b ? a : b;
}
inline int min(int a, int b)
{return a < b ? a : b;
}
inline int calc(int a, int b)
{int dis = a > b ? a - b : b - a;return min(dis, l - dis);
}
int num1[MAXN],num2[MAXN];
int main()
{int n;n=read(),l=read();for (register int i = 0; i < n; ++i){//scanf("%d", &A[i]);A[i]=read(),num1[i]=i;}for (register int i = 0; i < n; ++i){//scanf("%d", &B[i]);B[i]=read(),num2[i]=i;}random_shuffle(num1,num1+n);random_shuffle(num2,num2+n);sort(A, A + n);sort(B, B + n);int minmax = 0x7fffffff;for (register int ii = 0; ii <n; ++ii){int maxn = -0x7fffffff;for (register int jj = 0; jj <n; ++jj){int i=num1[ii],j=num2[jj];maxn = max(maxn, calc(A[j], B[(i + j >= n) ? (i + j - n) : (i + j)]));if (maxn >= minmax){break;}}minmax = min(minmax, maxn);}printf("%d\n", minmax);return 0;
}

然后就A了 hhh

CF981F Round Marriage相关推荐

  1. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

  2. HDU 3081 Marriage Match II【并查集+二分图最大匹配】

    大意:有n个男孩n个女孩,告诉你每个女孩喜欢哪些男孩,又告诉你女孩之间的存在一些朋友关系 一个女孩可以和她喜欢的男孩结婚也可以和她朋友喜欢的男孩结婚, 并且朋友关系可以传递 Once every gi ...

  3. hdu3081 Marriage Match II(最大流)

    转载请注明出处: http://www.cnblogs.com/fraud/           --by fraud Marriage Match II Time Limit: 2000/1000 ...

  4. 【HDU - 3081】Marriage Match II(网络流最大流,二分+网络流)

    题干: Presumably, you all have known the question of stable marriage match. A girl will choose a boy; ...

  5. HDU 3277 Marriage Match III(并查集+二分+最大流)

    题意:和HDU3081一样的题意,只不过多了一个条件,每个女孩除了能选自己喜欢的男生之外,还能选不超过K个自己不喜欢的男生,问游戏最多能进行几轮 思路:除了选喜欢的,还能选任意K个不喜欢的,怎么建图呢 ...

  6. HDU3081 Marriage Match II —— 传递闭包 + 二分图最大匹配 or 传递闭包 + 二分 + 最大流...

    题目链接:https://vjudge.net/problem/HDU-3081 Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    ...

  7. [kuangbin带你飞]专题十一 网络流\N HDU 3081 Marriage Match II

    题目描述 Presumably, you all have known the question of stable marriage match. A girl will choose a boy; ...

  8. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  9. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

最新文章

  1. redhat中使用securecrt 中文乱码解决办法
  2. haproxy的丰富特性简介
  3. flask-sqlalchemy Multiple Databases
  4. 心情随笔之纸包子假新闻 [2007年7月25日]
  5. HUST 1585 排队
  6. coreldraw2019天气滤镜_CorelDRAW2019快捷键大全
  7. Windows下获取群CPU使用率的方法
  8. (逆向工程)Android一键脱壳工具(MDEX)
  9. 最好的投资是投资自己:20本投资书单推荐
  10. Event Sourcing 和 CQRS
  11. 没有配置resolv.conf
  12. 计算机音乐大全集,计算器音乐合集
  13. 火影专场:Redis分布式锁实战
  14. 谷粒商城--SPU和SKU(属性分组、规格参数、销售属性)
  15. springboot对接第三方微信授权(以及获取用户的头像和昵称等等)
  16. julia的plot
  17. 过完618!来看看 Node.js 如何实现秒杀系统
  18. EventBus 的使用
  19. 什么是网站,什么是网页,网页网站的关系
  20. 计算机组装课的评课记录,计算机教学听课评语大全

热门文章

  1. 使用matplotlib绘制折线图(绘制一天当中的气温变化)
  2. easyExcel导入导出(列锁定单元格、表头合并、导出类型限制、锁定单元格增加底色、设置密码、隐藏列等)
  3. Entrust Datacard宣布与IBM Security开展目标远大的合作,以助力确保移动工作人员安全
  4. PG的timestamp
  5. 关于谷歌浏览器默认首页为好123的解决办法
  6. Qt编写4K/8K大分辨率播放器(8K占用1%CPU)
  7. Git 教程 - Git 基本用法
  8. STM32F407ZGT6之硬件介绍
  9. vue 调用移动录像_Vue 莹石摄像头直播视频实例代码
  10. DOM常用操作与Demo