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 (x2,y2) (x1 = x2 or y1 = y2) and changes the color of all squares (x,y) to black where x1 ≤ x ≤ x2 and y1 ≤ y ≤ y2. The beauty of an artwork is the number of regions in the grid. Each region consists of one or more white squares that are connected to each other using a path of white squares in the grid, walking horizontally or vertically but not diagonally. The initial beauty of the artwork is 1. Your task is to calculate the beauty after each new stroke. Figure A.1 illustrates how the beauty of the artwork varies in Sample Input 1.


                                1 region     3 regions      3 regions     4 regions     3 regions
Figure A.1: Illustration of Sample Input 1.
Input The first line of input contains three integers n, m and q (1 ≤ n,m ≤ 1000, 1 ≤ q ≤ 104). Then follow q lines that describe the strokes. Each line consists of four integers x1, y1, x2 and y2 (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ m). Either x1 = x2 or y1 = y2 (or both).

Input 
            
            The first line of input contains three integers n, m and q (1 ≤ n,m ≤ 1000, 1 ≤ q ≤ 104). Then follow q lines that describe the strokes. Each line consists of four integers x1, y1, x2 and y2 (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ m). Either x1 = x2 or y1 = y2 (or both).

Output

For each of the q strokes, output a line containing the beauty of the artwork after the stroke.

Sample Input 1                                                                             Sample Output 1

4 6 5
2 2 2 6
1 3 4 3
2 5 3 5
4 6 4 6
1 6 4 6

1
3        
3
4
3

这题输出方式让我想死。。。之前训练比赛时认为是输入一行就输出一行。。结果一直output limit exceeded。。后面看了别人的才发现是输完后再一起输出。。想死的心都有了。
思路:从最后一张图开始往前推,再用并查集解决。详细看代码
#include<stdio.h>
#include<string.h>
#define MAXN 1010
struct stock{
int x1, x2, y1, y2;
}pos[10010]; int num[MAXN*MAXN], fa[MAXN*MAXN],ans[10010];//num表示当前位置涂了几个黑点 ans[n]表示第n次画横线时白色连通块的个数
int dir[4][2] = { 0, 1, -1, 0, 0, -1, 1, 0 };
int m, n, p,t;
int hash(int x, int y)//用哈希表表示
{
int num = (x - 1)*m + y;
return num;
}
void init()//初始化
{
for (int i = 1; i <= n*m; i++)
{
fa[i] = i;
num[i] = 0;
}
}
int find(int x)
{
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void merge(int x, int y)//将两个相邻连通块连接在一起
{
int fx = find(x), fy = find(y);
if (fx == fy)
return;
t--;//t表示连通块个数
fa[fx] = fy;
}
bool check(int x, int y)
{
if (x >= 1 && y >= 1 && x <= n&&y <= m)
return true;
return false;
}
void work(int x,int y)//将刚出现的白块连到连通块中
{
for (int i = 0; i < 4; i++)
{
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if (check(xx, yy) && !num[hash(xx,yy)])
{
merge(hash(xx,yy), hash(x,y));
}
}
} int main()
{
scanf("%d %d %d", &n, &m, &p);
t = m*n;
init();
//画黑线
for (int i = 1; i <= p;i++)
{
scanf("%d%d%d%d", &pos[i].x1, &pos[i].y1, &pos[i].x2, &pos[i].y2);
for (int x = pos[i].x1; x <= pos[i].x2; x++)
{
for (int y = pos[i].y1; y <= pos[i].y2; y++)
{
if (num[hash(x, y)] == 0)
t--;
num[hash(x, y)]++;
}
}
}
//求出最后一个图的白色连通块的个数
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (!num[hash(i,j)])
{
work(i, j);
}
}
}
//向前面的图推
for (int i = p; i > 0; i--)
{
ans[i] = t;
//一步一步撤去黑线
for (int x = pos[i].x1; x <= pos[i].x2; x++)
{
for (int y = pos[i].y1; y <= pos[i].y2; y++)
{
num[hash(x, y)]--;
if (num[hash(x, y)] == 0)
{
t++;//黑块撤完白块数目增加
work(x, y);
}
}
}
}
for (int i = 1; i <= p; i++)
{
printf("%d\n", ans[i]);
}
return 0;
}

在比赛时从正面进行时是通过黑块入手的,发现时间没有超,但一直output limit exceeded


NCPC 2016 October 8,2016 Artwork的更多相关文章

  1. October 14th 2016 Week 42nd Friday

    Who am I? Coming October 18, 2016! 我是谁?2016.10.18 拭目以待! Don't worry. You will be a wow. Don't worry. ...

  2. 2016.1.4~2016.1.7真题回顾!-- HTML5学堂

    2016.1.4~2016.1.7真题回顾!-- HTML5学堂 2015悄然而逝,崭新的2016随即而行!生活需要新鲜感,学习JavaScript的过程需要有成就感!成就感又是来自于每一天的不断练习 ...

  3. Windows Server 2008 R2+SQL Server 2014 R2升级到Windows Server 2016+SQL Server 2016

    环境: 操作系统:Windows Server 2008 R2 数据库:SQL Server 2014 因SQL Server 2016可以无域创建AlwaysOn集群,集群只剩下单节点也不会挂掉,故 ...

  4. Windows 2016 安装Sharepoint 2016 预装组件失败

    Windows 2016 安装Sharepoint 2016 预装组件失败 日志如下: -- :: - Request for install time of Web 服务器(IIS)角色 -- :: ...

  5. 成功安装 Visio 2016 和 Office 2016 的64位版本~~

    .XML是个很  的东西!!! 折腾了一下 Visio 2016_x64 和 Office 2016_x64,功夫不负! 首先,选对配置工具很重要. 之前总是失败是因为在官网下载的配置工具是给2019 ...

  6. October 21st 2016 Week 43rd Friday

    Life is too short for long-term grudges. 人生苦短,无暇怨恨. Don't limit yourself. You can go as far as your ...

  7. October 17th 2016 Week 43rd Monday

    You only live once, but if you do it right, once is enough. 人生只有一次,但如果活对了,一次也就够了. Whether you do it ...

  8. October 15th 2016 Week 42nd Saturday

    Word to World. There are only two kinds of people who are really fascinating, people who know absolu ...

  9. October 13th 2016 Week 42nd Thursday

    If the world seems cold to you, kindle fires to warm it. 若世界以寒相待,请点燃火堆以温暖相报. Kindle fires to warm th ...

随机推荐

  1. markdown小记(语法+markdownpad)

    一.有道云笔记markdown语法小记 1.目录[TOC] 2.标题# 一级标题## 二级标题...###### 六级标题 3.项目列表有序列表: 1. 1. (显示为i.) 2. 3. - (显示为 ...

  2. Python Pool

    我们在使用Python时,会经常需要使用多进程/多线程的情况,以便提高程序的运行效率,尤其是跟网络进行交互,如使用爬虫时.下面我们将简单看下Python的进程池的创建,map().apply_asyn ...

  3. 产品排序 product

    评测传送门 [问题描述] 你是一个公司的员工,你会按时间顺序受到一些产品的订单,你需要用一个栈来改变这些订单的顺序(每个产品都必须入栈和出栈一次). 按初始顺序,每次可以将一个产品入栈,或将栈顶产品弹 ...

  4. Grunt、gulp、webpack、不要听着高大上你就上,试试Codekit?

    下载地址:https://incident57.com/codekit/ 官方网站了解更多 要编译Less.Sass.Stylus, CoffeeScript, Typescript, Jade, H ...

  5. solr后台界面介绍——(十一)

    1.加一个collection的方法 复制solr-home下的collection1,修改名字为collection2.并且修改collection2文件夹中配置文件core.properties中 ...

  6. ActiveMQ实现消息的发送与接受

    activemq是apache的一个JMS接口的实现产品,java中定义了JMS规范,虽然RocketMQ,kafka现在比较火,但是还是建议先学一下activeMQ再学其他两个就容易很多 首先可以下 ...

  7. 终端多窗口分屏Terminator

    1.安装 Terminator最大的特点就是可以在一个窗口中打开多个终端 sudo apt-get install terminator 2.快捷键 Ctrl+Shift+E 垂直分割窗口 Ctrl+ ...

  8. [MySQL FAQ]系列 — EXPLAIN结果中哪些信息要引起关注

    我们使用EXPLAIN解析SQL执行计划时,如果有下面几种情况,就需要特别关注下了: 首先看下 type 这列的结果,如果有类型是 ALL 时,表示预计会进行全表扫描(full table scan) ...

  9. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

  10. vue项目下使用iview总结

    iview在IE浏览器下有问题,打开页面是空白