Artwork】的更多相关文章

A template for an artwork is a white grid of n × m squares. The artwork will be created by painting q horizontal and vertical black strokes. A stroke starts from square (x1, y1), ends at square (x2, y2) (x1 = x2 or y1 = y2) and changes the color of a…
Problem A Artwork Problem ID: artwork Time limit: 4 seconds A template for an artwork is a white grid of n×m squares. The artwork will be created by painting q horizontal and vertical black strokes. A stroke starts from square (x1,y1), ends at square…
Artwork Gym - 102346A 题意:给n*m的地图,入口是(0,0),出口是(n,m),其中有k个监视器,坐标是(xi,yi),监视半径是r,问一个人能不能不被监视到,从起点到终点. 如果不能走到终点,无非便是监视范围把路全堵死了,所以开始的想法便是计算几何题,看多个圆能不能把横的和竖的都给覆盖了,但很明显行不通,然后想了想觉得这可以转换成一个图的题. 我们把每个监视器看出点,然后遍历每个监视器跟它相交(相切,包含)的其他点,已经看一下这个圆会涉及到那些边界.然后会把路封死的组合便…
Artwork (Gym - 102346A) 题目链接 算法 DFS,连通块 时间复杂度:O(k*n + k * k) 1.这道题就是让你判断从(0,0)到(m,n),避开中途所有的传感器(传感器的检测范围为半径为s的圆)的检测区域,最终能否到达(m,n). 2.这道题很容易想到圆与圆相切或相交最后把能出去的路全堵上了,具体是把上下.左右.左下.右上这四个边界给堵掉一部分(只要满足前面四种情况的其中一个,就过不去).见下图. 很明显,这样堵绝对出不去.然而方法是有,但怎么实现它呢?由于当时以为…
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2637 题意 积木,有左视图和前视图,问最少几块积木 思路 明显,把前视图视作列,左视图视作行,从大到小排列行和列,如果此时未处理的行列最大值恰巧相等为h,那么就是说在这个新行/列中,恰可以放一个高为h的积木.如果不相等且较大值为h,那么就必须要做一个高为h的积木组,假如…
题目链接 题意 给出正视图和侧视图,判断最少用几个立方体 分析 若存在高度相同的立方块,则以数目多的那面为准. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ; int num1[MAXN],num2[MAXN]; int n,m; int main(){ while (scanf("%d%d&qu…
题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图的性质,适用于任意平面图(大概是). (ps:本题思路是我受thu叉院神犇wzf在wannafly冬令营上提到的对偶图思想的启发而想出来的,先膜为敬~~) 我们可以反过来考虑黑格的连通性.假如我们在涂黑某个格点的时候,把两个分离的黑格“连了起来”,这时有两种可能的情况: 1.两黑格在同一连通分量.此…
统计正面看高度为i的竖条个数为cnt1[i], 统计侧面看高度为i的竖条个数为cnt2[i]: ans = sum( i * max( cnt1[i], cnt2[i] ) ); ( 1 <= i <= 20 ) 若使方块数最少,则令高度为i的竖条从正面看和侧面看都是同一条即可. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using n…
一.题意 对于一个矩阵,若干道命令,每道命令将会把某一段格子涂黑,请问每次涂黑之后矩阵中未被涂黑的块的数量? 二.思路 保存每道命令,并且忠实的执行他,到最后一步开始搜索联通块的数量,并将其保存. 之后对于每道命令做撤回操作.每次撤回之后重新扫描命令覆盖区域中已经是空白块的区域.并且将它们用并查集的方式统一起来. 最后倒序输出保存的答案. 三.代码实现 #include<iostream> #include<stdio.h> #include<stdlib.h> #in…
题目:题目链接 思路:每个空白区域当作一个并查集,因为正着使用并查集分割的话dfs会爆栈,判断过于复杂也会导致超时,我们采用离线反向操作,先全部涂好,然后把黑格子逐步涂白,我们把每个空白区域当作一个并查集,然后采用合并并查集的方法来做,好困啊,明天还有课,具体思路有空再写吧,先睡觉了. AC代码: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #in…