Problem

原题链接

Meaning

在二维平面内,有位置不同且不存在三点共线的 \(R\) 个红点和 \(B\) 个黑点,判断是否能用一些互不相交的线段连接每一个点,使得每条线段的两端都分别是黑点和白点。

Solution

当 \(R\ne{B}\) 时,显然无法实现红点与黑点的两两组合,故题干所述的情况一定不存在。

当 \(R=B\) 时,我们考虑一种连线的方式(事先给所有红点带上 \(1\) 的权值,给所有黑点带上 \(-1\) 的权值):先找到纵坐标最小的一列点,以其中任意一个点作为坐标原点重新构建平面直角坐标系。接下来,以这个坐标原点为顶点,向 \(y\) 轴正方向做一条射线。然后,将射线上除端点外所有点的权值累加起来,并将该射线绕着端点顺时针旋转,直到该射线过平面中其他的点。重复此操作并累加权值,直到累加值与端点的权值之和为 \(0\)。

由于射线最后扫过的点可以为累加值做出与端点相反的贡献,使得累加值为端点权值的相反数,故最后扫过的点一定与端点异色。而由于保证任意三点不共线,可以在这个点与端点之间连一条符合题意的线段。而且,由于顶点权值与累加值之和为 \(0\),所以这条线段上方、下方的红点与黑点的个数均分别相等。将线段上方、下方的两部分取出,重复上述的操作,直到某一部分只剩下一个红点和一个黑点。由于在这几个部分独立且均满足 \(R=B\),所以这一组操作可以完成,且没有任何两条线段相交。

综上所述,当 \(R=B\) 时,题干所述的情况一定存在。

下面,我们利用样例 \(1\) 来演示一下上述过程。

如图,我们找到点 \(D\) 并进行扫描。

  1. 射线 \(DE\),累加值 \(-1\),端点权值 \(-1\),扫描继续。
  2. 射线 \(DF\),累加值 \(-2\),端点权值 \(-1\),扫描继续。
  3. 射线 \(DC\),累加值 \(-1\),端点权值 \(-1\),扫描继续。
  4. 射线 \(DB\),累加值 \(0\),端点权值 \(-1\),扫描继续。
  5. 射线 \(DA\),累加值 \(1\),端点权值 \(-1\),扫描结束。

因此,我们连接 \(DA\)。

由于没有下半部分,只考虑上半部分。找到新的坐标原点为点 \(E\)。经过扫描,连接 \(EB\)。

此时只剩下红点 \(C\) 和黑点 \(F\),故存在题干所述的情况。

Code
#include<bits/stdc++.h>
using namespace std;
int main(){
int b,r,x,y;
scanf("%d%d",&r,&b);
for(int i=1;i<=r;++i) scanf("%d%d",&x,&y);
for(int i=1;i<=b;++i) scanf("%d%d",&x,&y);
if(b==r) printf("Yes");
else printf("NO");
}

CF958E1 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. 内部类--匿名内部类--java进阶day03

    1.匿名内部类 在介绍匿名内部类前,先引用一段代码材料,通过这段代码来理解匿名内部类 如下图,我们定义了接口和一个方法,方法中调用该接口的抽象方法,这时我们要调用use方法,但是该怎么传参呢? 我们将 ...

  2. 《Python基础教程》第三版语录

    对程序的结构(如需要哪些类和函数)有一定的想法后,建议你实现一个功能可能极其有限的简单版本. 当你有了可运行的程序后,将发现接下来的工作容易得多.你可添加新功能,修改不喜欢的方面,等等.这样你才能够真 ...

  3. bash极简教程

    今天看到消息,来自大神阮一峰的<bash脚本教程>开源发布了, 我也借此机会来总结个bash极简教程. 本文是一个更加简化的<bash极简教程>,告诉你什么时候需要使用bash ...

  4. C++ 程序员入门需要多久,怎样才能学好?

    一.我的C++学习之路:一个嵌入式老兵的自白 先交代一下我的背景:理工科毕业,半路出家学的编程.大学时代是机械专业,但阴差阳错进了一家电子公司,被分配做嵌入式开发,于是硬着头皮自学了C语言和单片机,后 ...

  5. Python+Selenium+unittest实例

    代码如下: # coding=utf-8 import time import unittest from selenium import webdriver class BaiduSearch(un ...

  6. 极客时间上新 .NET + AI 体系课

    课程特色 1️⃣ 全网首个.NET+AI体系化课程(没有之一!) 2️⃣ Semantic Kernel + Kernel Memory 核心知识全覆盖 3️⃣ 每课时基于Polyglot Noteb ...

  7. hadoop问题解决(七)日志/重启/开机自启动

    6.1hadoop日志 Master节点 Slave节点 6.2 hadoop排错 (待补充) 6.3 spark 6.4 zookeeper 6.5 hive 6.6 kafka 7重启命令 7.1 ...

  8. GitLab CI/CD 的配置文件 .gitlab-ci.yml 简介

    〇.前言 .gitlab-ci.yml 文件主要用于项目的自动化部署配置,自动化可以大大提升团队效率,但同时这个文件的内容也比较复杂,弄清楚也并非易事,本文将对此文件的内容进行简单介绍,供参考. 另外 ...

  9. 凯亚IOT平台在线测试MQTT接入设备

    一.概述 凯亚 (Kayak)开通了MQTT端口425,以便给感兴趣的同僚进行测试,下面将在此篇文章讲解如何平台接入设备进行MQTT通信 凯亚 (Kayak) 是什么? 凯亚(Kayak)是基于.NE ...

  10. 工具 | StarCodeSecurity

    0x00 简介 StarCodeSecurity是一款图形化的代码审计工具. 下载地址: StarCodeSecurity下载:StarCodeSecurity下载 0x01 功能说明 支持对规则进行 ...