atcoder E - Jigsaw(思维)
题目链接: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(思维)的更多相关文章
- AtCoder Non-decreasing(数学思维)
题目链接:https://abc081.contest.atcoder.jp/tasks/arc086_b 题目大意:有n个数,最多可以执行2*n次操作,每次可以选择将ai加到aj上,最终使得该序列满 ...
- すぬけ君の塗り絵 / Snuke's Coloring AtCoder - 2068 (思维,排序,贡献)
Problem Statement We have a grid with H rows and W columns. At first, all cells were painted white. ...
- 【AtCoder】【思维】【置换】Rabbit Exercise
题意: 有n只兔子,i号兔子开始的时候在a[i]号位置.每一轮操作都将若干只兔子依次进行操作: 加入操作的是b[i]号兔子,就将b[i]号兔子移动到关于b[i]-1号兔子现在所在的位置对称的地方,或者 ...
- 【AtCoder】【思维】【图论】Splatter Painting(AGC012)
题意: 有一个含有n个点的无向图,所有的点最初颜色均为0.有q次操作,每次操作将v[i]周围的距离小于等于d[i]的点全部都染成颜色c[i].最后输出每个点的最终的颜色. 数据范围: 1<=n, ...
- Iroha and a Grid AtCoder - 1974(思维水题)
就是一个组合数水题 偷个图 去掉阴影部分 把整个图看成上下两个矩形 对于上面的矩形求出起点到每个绿点的方案 对于下面的矩形 求出每个绿点到终点的方案 上下两个绿点的方案相乘后相加 就是了 想想为什么 ...
- AtCoder - 2565(思维+暴力)
题意 https://vjudge.net/problem/AtCoder-2565 将一个H*W的矩形切成三份,每一次只能水平或者垂直切,问最大块的面积-最小快的面积 的最小值是多少. 思路 先枚举 ...
- AtCoder - 2282 (思维+构造)
题意 https://vjudge.net/problem/AtCoder-2282 告诉你sx,sy,tx,ty,问从s走到t,再从t走到s,再从s走到t,再从t回到s的最短路,每次只能上下左右选一 ...
- AtCoder - 2140 (思维)
题意 https://vjudge.net/problem/AtCoder-2140 每次告诉你新的a:b,计算最后最小的a+b. 思路 如 3 2 3 1 1 3 2 先令a=2,b=3,发现新的为 ...
- AtCoder Grand Contest 019 B - Reverse and Compare【思维】
AtCoder Grand Contest 019 B - Reverse and Compare 题意:给定字符串,可以选定任意i.j且i<=j(当然i==j时没啥卵用),然后翻转i到j的字符 ...
随机推荐
- 使用JavaScript的XMLHttpRequest+fromdata 传递blob到后端
需要上传网页录音文件到服务器,写的艰辛,终于好了,C#端的代码失败的留作纪念,JS端也有失败的案例,就不放上来了 JavaScript: var form = new FormData(); form ...
- Keil5调试过程中遇到的一些警告和错误
最近用keil5调试代码出了一些警告与错误,整理如下: 1.warning: #1295-D: Deprecated declaration run_c - give arg types void r ...
- 8.源码分析---从设计模式中看SOFARPC中的EventBus?
我们在前面分析客户端引用的时候会看到如下这段代码: // 产生开始调用事件 if (EventBus.isEnable(ClientStartInvokeEvent.class)) { EventBu ...
- 使用excel计算骰子输赢概率
如何得到使用3个骰子掷赢4个骰子的概率(每个骰子的点数为1-6,点数一样算输) 分为3步解决: 第一步.计算n个骰子得到m点数的分布 1个骰子能得到1.2.3.4.5.6点数,每个点数出现的方式只有1 ...
- Stream和方法引用
1.Stream流 1.for循环带来的弊端 在jdk8中,lambda专注于做什么,而不是怎么做 for循环的语法就是怎么做 for循环的循环体才是做什么 遍历是指每一个元素逐一进行处理,而并不是从 ...
- 带图标和多行显示的ListBox
源码https://www.codeproject.com/Articles/15464/Extending-the-ListBox-to-show-more-complex-items 定义控件 u ...
- centos7 环境下安装nginx--Linux
一.安装前需要的编译环境准备 1.安装make yum install -y gcc automake autoconf libtool make 2.安装gcc.gcc-c++ yum instal ...
- Springboot源码分析之项目结构
Springboot源码分析之项目结构 摘要: 无论是从IDEA还是其他的SDS开发工具亦或是https://start.spring.io/ 进行解压,我们都会得到同样的一个pom.xml文件 4. ...
- 40道经典java多线程面试题
40道经典java多线程面试题 题目来源 看完了java并发编程的艺术,自认为多线程"大成",然后找了一些面试题,也发现了一些不足. 一下问题来源于网上的博客,答案均为本人个人见解 ...
- MYSQL--表与表之间的关系、修改表的相关操作
表与表之间的操作: 如果所有信息都在一张表中: 1.表的结构不清晰 2.浪费硬盘空间 3.表的扩展性变得极差(致命的缺点) 确立表与表之间的关系.一定要换位思考(必须在两者考虑清楚之后才能得出结论) ...