NCPC 2016 October 8,2016 Artwork
Problem A
Artwork
Problem ID: artwork
Time limit: 4 seconds
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).
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
|
#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的更多相关文章
- 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. ...
- 2016.1.4~2016.1.7真题回顾!-- HTML5学堂
2016.1.4~2016.1.7真题回顾!-- HTML5学堂 2015悄然而逝,崭新的2016随即而行!生活需要新鲜感,学习JavaScript的过程需要有成就感!成就感又是来自于每一天的不断练习 ...
- 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集群,集群只剩下单节点也不会挂掉,故 ...
- Windows 2016 安装Sharepoint 2016 预装组件失败
Windows 2016 安装Sharepoint 2016 预装组件失败 日志如下: -- :: - Request for install time of Web 服务器(IIS)角色 -- :: ...
- 成功安装 Visio 2016 和 Office 2016 的64位版本~~
.XML是个很 的东西!!! 折腾了一下 Visio 2016_x64 和 Office 2016_x64,功夫不负! 首先,选对配置工具很重要. 之前总是失败是因为在官网下载的配置工具是给2019 ...
- 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 ...
- October 17th 2016 Week 43rd Monday
You only live once, but if you do it right, once is enough. 人生只有一次,但如果活对了,一次也就够了. Whether you do it ...
- October 15th 2016 Week 42nd Saturday
Word to World. There are only two kinds of people who are really fascinating, people who know absolu ...
- October 13th 2016 Week 42nd Thursday
If the world seems cold to you, kindle fires to warm it. 若世界以寒相待,请点燃火堆以温暖相报. Kindle fires to warm th ...
随机推荐
- python概念-Socket到底有多骚
Socket究竟是什么呢? 简单来说Socket就是用来完成客户端与服务器之间的通信 例如浏览器访问网页,例如网络游戏等一切基于客户端服务器来实现的C/S架构程序 Socket是基于互联网OSI七层协 ...
- 正则表达式入门之学习路线&七个问题
由于工作需求,需要使用正则表达式查找满足某种模式的字符串,但因为之前都没有接触过相关内容,最开始的时候看了一些已经被别人写好了的正则表达式,本来打算可能可以直接使用: 最全的常用正则表达式大全——包括 ...
- Dream------scala--scala内部类实战
Dream------scala--scala内部类实战 scala的内部类跟java的内部类有很大的不同,java中的内部类实际上是从属于外部类,而scala的内部类是从属于外部类对象的(及外部类实 ...
- java创建并配置多module的maven项目
1 使用idea创建(推荐) 这篇博客写的特别好,很详细: https://blog.csdn.net/sinat_30160727/article/details/78109769 2 使用ecli ...
- REX系统了解1
REX是高通开发出来的一个操作系统,起初它是为了在Inter 80186处理器上应用而开发的,到后来才转变成应用在ARM这种微处理器上.他历经了很多版本,代码也越来越多,功能也越来越完善.REX只用不 ...
- mvc 分部视图(Partial)显示登陆前后变化以及Shared文件夹在解决方案资源管理器中没有显示的问题
刚开始我的解决方案资源管理器中没有显示Shared文件夹,但Shared文件夹在项目中是实际存在的,我搜了下好像没有类似的解答(可能是我搜索的关键词不够准确).后来自己看了下vs2012. 其实解决方 ...
- centos6.9系统优化
仅供参考 有道云笔记链接->
- 十六、springboot整合Spring-data-jpa(二)之通用DAO接口与添加自定义方法
@NoRepositoryBean:Spring Data Jpa在启动时就不会去实例化BaseRepository这个接口 1.通用接口: import org.springframework.da ...
- RedisTemplate使用
RedisTemplate中定义了对5种数据结构操作 redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash r ...
- Hash 分布均衡算法
1.移位实现 public static int GetIndex(string str, int count) { , (current, c) => (current << ) ...