题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_e

题解:这题很巧妙运用了cnt[i]抽象的表示了上下互补的状态,最后上面突出的一定要处理完。下面突出的可以多。而且最后要处理一下下面多的情况不能自己左右互补具体看一下代码。

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <vector>
using namespace std;
const int M = 1e5 + 10;
int f[600] , cnt[600] , c[600];
vector<int>vc[600];
void init() {
for(int i = 0 ; i <= 555 ; i++) {
cnt[i] = 0;
c[i] = 0;
f[i] = i;
}
}
int find(int x) {
if(x == f[x]) return x;
int tmp = find(f[x]);
return f[x] = tmp;
}
int main() {
int n , h;
scanf("%d%d" , &n , &h);
init();
for(int i = 1 ; i <= n ; i++) {
int a , b , c , d;
scanf("%d%d%d%d" , &a , &b , &c , &d);
int x = c , y = -d;
if(c == 0) x = -a;
if(d == 0) y = b;
x += 250 , y += 250;
vc[x].push_back(y);
cnt[x]++ , cnt[y]--;
f[find(x)] = find(y);
}
int flag = 1;
for(int i = 0 ; i <= 500 ; i++) {
if(i > 250 && cnt[i] > 0) flag = 0;//大于250的表示上面突出的上面突出的不能多。
if(i < 250 && cnt[i] < 0) flag = 0;//小于250的表示下面突出的下面突出的不能少。
if(cnt[i] > 0) {
c[find(i)] = 1;//确保不是左右互补
}
}
for(int i = 0 ; i <= 500 ; i++) {
if(vc[i].size() > 0 && !c[find(i)]) flag = 0;
}
flag ? puts("YES") : puts("NO");
return 0;
}

atcoder E - Jigsaw(思维)的更多相关文章

  1. AtCoder Non-decreasing(数学思维)

    题目链接:https://abc081.contest.atcoder.jp/tasks/arc086_b 题目大意:有n个数,最多可以执行2*n次操作,每次可以选择将ai加到aj上,最终使得该序列满 ...

  2. すぬけ君の塗り絵 / Snuke's Coloring AtCoder - 2068 (思维,排序,贡献)

    Problem Statement We have a grid with H rows and W columns. At first, all cells were painted white. ...

  3. 【AtCoder】【思维】【置换】Rabbit Exercise

    题意: 有n只兔子,i号兔子开始的时候在a[i]号位置.每一轮操作都将若干只兔子依次进行操作: 加入操作的是b[i]号兔子,就将b[i]号兔子移动到关于b[i]-1号兔子现在所在的位置对称的地方,或者 ...

  4. 【AtCoder】【思维】【图论】Splatter Painting(AGC012)

    题意: 有一个含有n个点的无向图,所有的点最初颜色均为0.有q次操作,每次操作将v[i]周围的距离小于等于d[i]的点全部都染成颜色c[i].最后输出每个点的最终的颜色. 数据范围: 1<=n, ...

  5. Iroha and a Grid AtCoder - 1974(思维水题)

    就是一个组合数水题 偷个图 去掉阴影部分  把整个图看成上下两个矩形 对于上面的矩形求出起点到每个绿点的方案 对于下面的矩形 求出每个绿点到终点的方案 上下两个绿点的方案相乘后相加 就是了 想想为什么 ...

  6. AtCoder - 2565(思维+暴力)

    题意 https://vjudge.net/problem/AtCoder-2565 将一个H*W的矩形切成三份,每一次只能水平或者垂直切,问最大块的面积-最小快的面积 的最小值是多少. 思路 先枚举 ...

  7. AtCoder - 2282 (思维+构造)

    题意 https://vjudge.net/problem/AtCoder-2282 告诉你sx,sy,tx,ty,问从s走到t,再从t走到s,再从s走到t,再从t回到s的最短路,每次只能上下左右选一 ...

  8. AtCoder - 2140 (思维)

    题意 https://vjudge.net/problem/AtCoder-2140 每次告诉你新的a:b,计算最后最小的a+b. 思路 如 3 2 3 1 1 3 2 先令a=2,b=3,发现新的为 ...

  9. AtCoder Grand Contest 019 B - Reverse and Compare【思维】

    AtCoder Grand Contest 019 B - Reverse and Compare 题意:给定字符串,可以选定任意i.j且i<=j(当然i==j时没啥卵用),然后翻转i到j的字符 ...

随机推荐

  1. 【Android】java.lang.StackOverflowError: stack size 8MB

    最近遇到的问题,报了两个错误,如下: java.lang.StackOverflowError: stack size 8MB android.os.TransactionTooLargeExcept ...

  2. docker挂载volume的用户权限问题,理解docker容器的uid

    docker挂载volume的用户权限问题,理解docker容器的uid 在刚开始使用docker volume挂载数据卷的时候,经常出现没有权限的问题. 这里通过遇到的问题来理解docker容器用户 ...

  3. MySql数据库操作命令

    数据库 database 命令 ********************************* DATABASE 创建数据库 CREATE DATABASE haodlDB DEFAULT CHA ...

  4. Apache之——多虚拟主机多站点配置的两种实现方案

    Apache中配置多主机多站点,可以通过两种方式实现: 将同一个域名的不同端口映射到不同的虚拟主机,不同端口映射到不同的站点: 将同一个端口映射成不同的域名,不同的域名映射到不同的站点. 我们只需要修 ...

  5. 章节十五、6-log4 2-用默认的配置

    一.实例演示 package log4jtutorial; import org.apache.logging.log4j.LogManager; import org.apache.logging. ...

  6. Pipeline 模型

    解决的问题 解决并发效率问题,将任务拆分成流水线,然后多线程并发执行,比之单线程执行快. 案例 CPU 流水线 Tomcat 容器 Structs

  7. Mermaid

    graph TD; A-->B; A-->C; B-->D; C-->D;

  8. python 列表的增删改查

    列表 有序可变的,索引 作用:存储数据的,支持很多种数据类型 定义方式: lst = [1,"alex",True,('a','b')]增 append() # 追加 extend ...

  9. Spring Boot 中的同一个 Bug,竟然把我坑了两次!

    真是郁闷,不过这事又一次提醒我解决问题还是要根治,不能囫囵吞枣,否则相同的问题可能会以不同的形式出现,每次都得花时间去搞.刨根问底,一步到位,再遇到类似问题就可以分分钟解决了. 如果大家没看过松哥之前 ...

  10. 如何调教你的博客Episode1——修改整体样式

    如图所示,这是你刚刚注册的博客园博客,让我们开始一步步修改它. 1.写入自适应代码 html,body{ height:100%; border:; margin:; padding:; } body ...