CF468B Two Sets

原题链接

DOWNLOAD AS PDF

题目大意

给出\(n\)个各不相同的数字,将它们分别放入\(A\)\(B\)两个集合中,使它们满足:

  • 若数字\(x\)在集合\(A\)中,那么数字\(a-x\)也在集合\(A\)中;
  • 若数字\(x\)在集合\(B\)中,那么数字\(b−x\)也在集合\(B\)中。

(by \(\color{red}\sf{Uranus}\)

题解

感觉网上全是并查集的题解。

没有贪心?

感觉贪心比并查集好想啊……

首先我们想到的肯定是开个set大力匹配,然而发现对于一个\(x\)可能\(a-x\)\(b-x\)都在序列中,于是我们就陷入两难了。

如何解决这个问题呢?

现在我们假设\(a\ge b\)

我们每次贪心地选出没有匹配过的数的最小值,设其为\(x\)

假设我们发现\(a-x\)\(b-x\)都在序列中且都没有被匹配过。

我们会发现\(x\)一定与\(a - x\)匹配。

假设答案是\(x\)\(b - x\)匹配,那也就是说\(a - x\)不在\(A\)集合里,所以其在\(B\)集合里,则与之匹配的是\(b - (a - x) = x + (b - a)\le x\),但由于\(x\)是序列中的最小数,所以不存在\(b - (a - x)\)

代码也很简单:

#include <cstdio>
#include <cstring>
#include <set>using namespace std;const int maxn = 100005;int ans[maxn];struct EE
{int x, id;inline bool operator < (const EE& other) const{return this->x < other.x;}
} aa[maxn];set<EE> ss;int main()
{int n, a, b;scanf("%d%d%d", &n, &a, &b);ss.clear();bool f = false;if(a < b){swap(a, b);f = true;}for(int i = 1; i <= n; ++i){EE aa;scanf("%d", &aa.x);aa.id = i;ss.insert(aa);}memset(ans, 0xff, sizeof(ans));while(!ss.empty()){set<EE>::iterator it = ss.begin();EE tx = *it;tx.x = a - it->x;set<EE>::iterator x = ss.lower_bound(tx);if(x != ss.end() && x->x + it->x == a){ans[x->id] = ans[it->id] = 0;if(x->id != it->id){ss.erase(x);ss.erase(it);}elsess.erase(x);}else{tx.x = b - it->x;x = ss.lower_bound(tx);if(x != ss.end() && x->x + it->x == b){ans[x->id] = ans[it->id] = 1;if(x->id != it->id)ss.erase(it);ss.erase(x);}elsereturn puts("NO"), 0;}}puts("YES");for(int i = 1; i <= n; ++i)printf("%d ", ans[i] ^ f);return 0;
}

转载于:https://www.cnblogs.com/pfypfy/p/9609913.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows c语言 redis,windows上使用VS2012 C++语言调用Redis的解决方案

最近我在VS2012上进行Redis开发遇到一些困扰. 编译Redis的lib库没问题。但是使用这些lib库就不太顺利了. 在网上查来查去也没解决。不过其实Redis的客户端项目RedisCli.vcxproj,就是一个最好的使用例子. 我把几个需要注意的地方贴出来注意事项1. 链接器->输入->忽略所有默…

plantuml 方法图_PlantUML 语法之时序图

plantUML 下载(含《plantUML语法指南手册》)&#xff1a;http://plantuml.com/downloadVisual Studio Code 安装 plantUML 插件&#xff0c;在插件应用商店中搜索&#xff1a;PlantUML&#xff0c;点击安装即可。快捷键&#xff1a;Alt D 即可快速预览&#xff0c;Ctrl Shift…

运维实施面试题

记得不是很清楚了&#xff0c;大概回忆一下 1集线器&#xff0c;路由器。交换机的区别 术语解释   路由器&#xff1a;&#xff08;Router&#xff09;是连接因特网中各局域网、广域网的设备。在路由器中记录着路由表&#xff0c;它会根据信道的情况自动选择和设定路由&#…

CCF 201312-3 最大的矩形[比较简单]

问题描述 试题编号&#xff1a;201312-3试题名称&#xff1a;最大的矩形时间限制&#xff1a;1.0s内存限制&#xff1a;256.0MB问题描述&#xff1a; 问题描述在横轴上放了n个相邻的矩形&#xff0c;每个矩形的宽度是1&#xff0c;而第i&#xff08;1 ≤ i ≤ n&#xff09;个矩…

鸿蒙系统太烂,一加终于觉醒!变相承认系统太烂,魅族的吐槽一针见血

刘作虎宣布&#xff0c;一加9系列出厂预装ColorOS 11&#xff0c;终于证实了外界的猜想&#xff0c;一加终于也要放弃自己的系统&#xff0c;这已经证明了之前的氢系统已经在国内市场上彻底失败。想要收服用户&#xff0c;还是需要本土定制化的应用。不过这也显示出一加手机的决…

安卓开发toolbar设置logo_Android之ToolBar的使用

Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 &#xff0c;Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏&#xff0c;以此来取代之前的 Actionbar 。与 Actionbar 相比&#xff0c; Toolbar 明显要灵活的多。它不像 Actionbar 一样…

实例23:python

#题目&#xff1a;打印出如下图案&#xff08;菱形&#xff09;: * *** ***** #******* ***** *** * #先把图形分成两部分来看待&#xff0c;前四行一个规律&#xff0c;后三行一个规律&#xff0c;利用双重for循环&#xff0c;第一层控制行&#xff0c;第二层控制列。…

babel 用法及其 .babelrc 的配置详解,想做前端架构,拒绝一知半解...

Babel 官方介绍&#xff1a;将 ECMAScript 2015 及其版本以后的 javascript 代码转为旧版本浏览器或者是环境中向后兼容版本的 javascript 代码。 简而言之&#xff0c;就是把不兼容的 JavaScript 代码转为可兼容&#xff0c;可以执行的 JavaScript 代码。 功能&#xff1a; 语…

android 滚动尺画到控件中间,android 刻度尺控件实现

主要实现刻度尺的效果&#xff0c;能够快速滑动刻度&#xff0c;设置刻度间距&#xff0c;刻度值&#xff0c;滑动回调。简单易用效果图textureView控件的选择总结来说:1.view的绘制在主线程里面&#xff0c;频繁绘制会导致主线程阻塞2.我们知道一个surfaceview是异步绘制的&am…

实例24:python

#题目&#xff1a;有一分数序列&#xff1a;2/1&#xff0c;3/2&#xff0c;5/3&#xff0c;8/5&#xff0c;13/8&#xff0c;21/13…求出这个数列的前20项之和。 #!/usr/bin/python -- coding: UTF-8 -- a 2.0 b 1.0 s 0 for n in range(1,21): s a / b t a a a b b…

适合新手入门的8个python项目_推荐:一个适合于Python新手的入门练手项目

随着人工智能的兴起&#xff0c;国内掀起了一股Python学习热潮&#xff0c;入门级编程语言&#xff0c;大多选择Python&#xff0c;有经验的程序员&#xff0c;也开始学习Python&#xff0c;正所谓是人生苦短&#xff0c;我用Python有个Python入门练手项目&#xff0c;一直没有…

Luogu 4514 上帝造题的七分钟

二维差分树状数组。 定义差分数组$d_{i, j} a_{i, j} a_{i - 1, j - 1} - a_{i, j - 1} - a_{i - 1, j}$&#xff0c;有$a_{i, j} \sum_{x 1}^{i}\sum_{y 1}^{j}d_{i, j}$。 我们要求$sum(n, m) \sum_{i 1}^{n}\sum_{j 1}^{m}a_{i, j} $&#xff0c; 代入$a_{i, j}$&am…

jsp空白页面传html代码,echarts在HTML里测试一般,在jsp页面不显示,而且还把整个页面变成空白...

echarts在HTML里测试正常&#xff0c;在jsp页面不显示&#xff0c;而且还把整个页面变成空白echarts在HTML里测试正常&#xff0c;在jsp页面不显示&#xff0c;而且还把整个页面变成空白&#xff0c;请大神帮忙&#xff0c;急&#xff0c;在线等Created by IntelliJ IDEA.User:…

实例25:python

#题目&#xff1a;求12!3!…20!的和。 #!/usr/bin/python -- coding: UTF-8 -- n 0 s 0 t 1 for n in range(1,21): t * n s t print (‘1! 2! 3! … 20! %d’ % s)

mysql日期格式化季度_mysql按年度、季度、月度、周、日统计查询的sql语句

本文介绍一些mysql中用于查询的sql语句&#xff0c;包括按年度、季度、月度、周、日统计查询等&#xff0c;有需要的朋友&#xff0c;可以参考下。一、年度查询查询 本年度的数据SELECT *FROM blog_articleWHERE year( FROM_UNIXTIME( BlogCreateTime ) ) year( curdate( ))二…

html字体变大自动换行,网页css中实现字符超出宽度自动换行和英语字符不断行的解决方法...

需求&#xff1a;为了使英语字符不断开&#xff0c;我在显示内容的style是text-align:justify; text-justify:inter-ideograph。可是这样子在后台添加内容时&#xff0c;如果不是键盘输入的&#xff0c;而是copy到输入框里的话&#xff0c;这样前台显示出来的帖子内容会把表格撑…

Thread类中的join方法

package charpter06; //类实现接口public class Processor implements Runnable { // 重写接口方法 Override public void run() { for (int i 0; i < 100; i) { System.out.println(Thread.currentThread().getName() "*****************" i); } } } --------…

实例26:python

#题目&#xff1a;利用递归方法求5! #!/usr/bin/python -- coding: UTF-8 -- def fact(j):#定义一个函数 sum 0 if j 0: sum 1 else: sum j * fact(j - 1) return sum print (fact(5))

苹果地图副总裁_Amazon A9副总裁Benoit Dupin加入苹果,负责改善苹果地图搜索服务...

继挖角William Stasior 管理Siri之后&#xff0c;苹果最近又出手了&#xff0c;这一次&#xff0c;Amazon A9 搜索技术团队的副总裁 Benoit Dupin 将加入苹果&#xff0c;并负责改善苹果地图搜索服务。Benoit Dupin 2007年加入Amazon&#xff0c;主要负责搜索架构、用户体验等相…

[SimplePlayer] 2. 在屏幕上显示视频图像

我们这里采用SDL&#xff08;本文所用版本为SDL2.0.5&#xff09;来进行图像输出&#xff0c;SDL在进行图像渲染时一般采用的会是direct3D或者opengl&#xff0c;SDL对它们进行了封装&#xff0c;不过我们这里只讨论SDL的使用&#xff0c;并不会去涉及这些底层实现。尽管如此&a…