AtCoder ARC 076E - Connected?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c
平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次。现在用一条曲线将一对相同的数字连接,对于数字1~N。试判断是否存在一种连接方式,使得曲线不越过矩形网格边界,且曲线之间不相交?
若平面网格为无限大,则使得曲线之间不相交的连接方式一定存在。因此,在一个R×C的网格上,优先考虑边界上的点对,再考虑不全在边界上的点对。将两次均处于边界上的数字的集合记为S。
由于曲线不越过网格边界,因此规定曲线均位于边界内侧。以下只需考虑曲线是否相交。
设集合S中的元素i,j,在边界上出现的顺序为i,j,i,j,则连接i点对的曲线与连接j点对的曲线一定相交;若出现的顺序为i,i,j,j或i,j,j,i,则连接i点对的曲线与连接j点对的曲线不相交。因此,可以考虑用栈(Stack)实现边界点对的检验:沿顺时针方向遍历边界上的点对,若当前栈不为空,且栈顶元素与当前位置的数字相同,则将栈顶元素弹出;否则将当前位置的数字压入栈。如此,若最终栈为空,则答案为YES,否则为NO。
参考程序如下:
#include <bits/stdc++.h>
using namespace std; #define MAX_N 100010 int r, c, n;
stack<int> s;
struct point {int id, coor;} p[][ * MAX_N]; int boundary(int x, int y)
{
if (x == ) return ;
else if (y == c) return ;
else if (x == r) return ;
else if (y == ) return ;
else return -;
} bool cmp_inc(point a, point b)
{
return a.coor < b.coor;
} bool cmp_dec(point a, point b)
{
return a.coor > b.coor;
} int main(void)
{
scanf("%d%d%d", &r, &c, &n);
int cnt[] = {};
for (int i = ; i <= n; i++) {
int x[], y[];
scanf("%d%d%d%d", &x[], &y[], &x[], &y[]);
bool is_boundary = true;
for (int j = ; j < ; j++) {
if (x[j] % r && y[j] % c) is_boundary = false;
}
if (is_boundary) {
for (int j = ; j < ; j++) {
int t = boundary(x[j], y[j]);
p[t][cnt[t]].id = i;
p[t][cnt[t]].coor = t % ? x[j]: y[j];
cnt[t]++;
}
}
}
for (int i = ; i < ; i++) {
if (i < ) sort(p[i], p[i] + cnt[i], cmp_inc);
else sort(p[i], p[i] + cnt[i], cmp_dec);
for (int j = ; j < cnt[i]; j++) {
if (s.size() && s.top() == p[i][j].id)
s.pop();
else
s.push(p[i][j].id);
}
}
if (s.empty()) printf("YES\n");
else printf("NO\n");
return ;
}
AtCoder ARC 076E - Connected?的更多相关文章
- 【题解】Atcoder ARC#90 F-Number of Digits
Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...
- AtCoder ARC 076D - Built?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...
- AtCoder ARC 082E - ConvexScore
传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...
- Atcoder ARC 082C/D
C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- 【题解】Atcoder ARC#96 F-Sweet Alchemy
首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...
- AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision
题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...
- 【题解】Atcoder ARC#67 F-Yakiniku Restaurants
觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...
- 【题解】Atcoder ARC#85 E-MUL
……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...
随机推荐
- 天了噜,我国4G用户超过2亿了!
近期,看到工信部一组统计数据,小编整个人都不好了,数据显示,2015年5月我国4G用户净增2281.6万,总数超过2亿户. 没错,卡是换成了4G卡,还是那句话,然并卵,用的还是3G手机.开的还是2G网 ...
- MongoDB改动、删除文档的域属性实例
MongoDB改动.删除文档的域属性实例 在站点的开发中,可能最初的设计不合理.或者后期业务的变更,会造成文档结构会有些无用的属性.须要去删除或改动.因为MongoDB 是无 Schema 的,不像关 ...
- js原生offsetParent解析
offsetParent是个仅仅读属性,返回近期显示指定位置的容器元素的引用. 假设元素没有指定位置,近期的元素或者根元素(标准模式下是html,怪异模式下是body)就是offsetParent. ...
- android自带的处理Bitmap out Memory 的处理,我仅仅是改变了些写法成为自己用的东西
每天上万次的启动载入证明这个载入是不错的; 第三方的载入框架非常多,推荐使用成熟框架,比方大家都知道的ImageLoad等, 这里的仅仅供学习; 我也曾在一个菜谱的项目里写过载入手机相冊图片的,只是当 ...
- iOS学习(3)
4. 这个写法会出什么问题: @property (copy) NSMutableArray *array; 两个问题:1.加入,删除,改动数组内的元素的时候,程序会由于找不到相应的方法而崩溃.由于 ...
- Android+Jquery Mobile学习系列(4)-页面转场及参数传递
关于页面转场,这个必须得专门列出来说明一下,因为Jquery Mobile与普通的Web发开有一些区别,这个对于新手如果不了解的话,就会钻到死胡同.撸主前段时间就是很急躁地上手开发程序,结果在页面转场 ...
- MySQL优化小方法
一.查询优化 1.尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引: 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而 ...
- 3个不常用的HTML标签
html标签众多,在HTML手册里你可以都查到.但有的HTML标签你可能从未使用过.不是因为你欠缺学习精神,而是它们确实用处不大.如果你有探索精神,那就接着往下看吧. 第一个:<abbr> ...
- codevs2596 售货员的难题(状压dp)
2596 售货员的难题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某乡有n个村庄(1<n<=15 ...
- 线性预测与Levinson-Durbin算法实现
在学习信号处理的时候,线性预测是一个比较难理解的知识点,为了加快很多朋友的理解,这里给出Levinson-Durbin算法的线性预测实现和一个测试Demo,Demo中很明确的把输入信号.预测信号.预测 ...