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. python概念-Socket到底有多骚

    Socket究竟是什么呢? 简单来说Socket就是用来完成客户端与服务器之间的通信 例如浏览器访问网页,例如网络游戏等一切基于客户端服务器来实现的C/S架构程序 Socket是基于互联网OSI七层协 ...

  2. 正则表达式入门之学习路线&七个问题

    由于工作需求,需要使用正则表达式查找满足某种模式的字符串,但因为之前都没有接触过相关内容,最开始的时候看了一些已经被别人写好了的正则表达式,本来打算可能可以直接使用: 最全的常用正则表达式大全——包括 ...

  3. Dream------scala--scala内部类实战

    Dream------scala--scala内部类实战 scala的内部类跟java的内部类有很大的不同,java中的内部类实际上是从属于外部类,而scala的内部类是从属于外部类对象的(及外部类实 ...

  4. java创建并配置多module的maven项目

    1 使用idea创建(推荐) 这篇博客写的特别好,很详细: https://blog.csdn.net/sinat_30160727/article/details/78109769 2 使用ecli ...

  5. REX系统了解1

    REX是高通开发出来的一个操作系统,起初它是为了在Inter 80186处理器上应用而开发的,到后来才转变成应用在ARM这种微处理器上.他历经了很多版本,代码也越来越多,功能也越来越完善.REX只用不 ...

  6. mvc 分部视图(Partial)显示登陆前后变化以及Shared文件夹在解决方案资源管理器中没有显示的问题

    刚开始我的解决方案资源管理器中没有显示Shared文件夹,但Shared文件夹在项目中是实际存在的,我搜了下好像没有类似的解答(可能是我搜索的关键词不够准确).后来自己看了下vs2012. 其实解决方 ...

  7. centos6.9系统优化

    仅供参考 有道云笔记链接->

  8. 十六、springboot整合Spring-data-jpa(二)之通用DAO接口与添加自定义方法

    @NoRepositoryBean:Spring Data Jpa在启动时就不会去实例化BaseRepository这个接口 1.通用接口: import org.springframework.da ...

  9. RedisTemplate使用

    RedisTemplate中定义了对5种数据结构操作 redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash r ...

  10. Hash 分布均衡算法

    1.移位实现 public static int GetIndex(string str, int count) { , (current, c) => (current << ) ...