[COI2007] Sabor
下面给出这道一脸不可做的题的鬼畜性质:
1)对于一个点来说,其归属状态是确定的:走不到、A党或B党 。(黑白格染色)
方便起见,将包含所有不可达的点的极小矩形向外扩展一圈,设为矩形M。
2)矩形M的最外圈上相邻两点点到(0,0)的最短曼哈顿距离差值不超过1。
3)矩形M外任意正对于矩形M的点到垂直走向所正对的边必是到(0,0)的满足曼哈顿距离最小的路径的一条。
4)矩形M外任意非正对于矩形M到最靠近的M的一角必是到(0,0)的满足曼哈顿距离最小的路径的一条。
利用这些性质就可做了。。主要是向外扩展一圈这儿。。
然后就是找找规律的事儿了。。
#include <bits/stdc++.h>
#define P 1000
using namespace std;
const int fx[]={1,-1,0,0};
const int fy[]={0,0,1,-1};
int B,S;
long long cnt[2];
int dis[2005][2005];
int maxx,maxy,minx,miny;
queue<int> Qx,Qy;
inline void f1(int x,int y) {
	cnt[(x+y)&1]+=1LL*((S-dis[x][y])/2)*((S-dis[x][y])/2);
	cnt[(x+y+1)&1]+=1LL*((S-dis[x][y]-1)/2)*((S-dis[x][y]-1)/2+1);
}
inline void f2(int x,int y) {
	cnt[(x+y)&1]+=(S-dis[x][y])/2;
	cnt[(x+y+1)&1]+=(S-dis[x][y]+1)/2;
}
int main() {
	scanf("%d%d",&B,&S);
	minx=miny=maxx=maxy=P;
	for(int x,y,i=1; i<=B; ++i) {
		scanf("%d%d",&x,&y);
		x+=P,y+=P;
		dis[x][y]=-1;
		minx=min(minx,x);
		maxx=max(maxx,x);
		miny=min(miny,y);
		maxy=max(maxy,y);
	}
	S++;
	minx--,miny--;
	maxx++,maxy++;
	Qx.push(P);
	Qy.push(P);
	dis[P][P]=1;
	while(!Qx.empty()) {
		int x=Qx.front(); Qx.pop();
		int y=Qy.front(); Qy.pop();
		if((x==minx||x==maxx) && (y==miny||y==maxy)) f1(x,y);
		if((x==minx||x==maxx)) f2(x,y);
		if((y==miny||y==maxy)) f2(x,y);
		cnt[(x+y)&1]++;
		if(dis[x][y]==S) continue;
		for(int nx,ny,k=0; k<4; ++k) {
			nx=x+fx[k];
			ny=y+fy[k];
			if(nx<minx||ny<miny||nx>maxx||ny>maxy||dis[nx][ny]) continue;
			dis[nx][ny]=dis[x][y]+1;
			Qx.push(nx);
			Qy.push(ny);
		}
	}
	printf("%lld %lld\n",cnt[0],cnt[1]);
	return 0;
}
[COI2007] Sabor的更多相关文章
- 洛谷 P1823 [COI2007] Patrik 音乐会的等待
		洛谷 P1823 [COI2007] Patrik 音乐会的等待 洛谷传送门 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A ... 
- 洛谷 P1823 [COI2007] Patrik 音乐会的等待 题解
		P1823 [COI2007] Patrik 音乐会的等待 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相 ... 
- 洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找)
		洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1333275 这个题不是很 ... 
- P4334 [COI2007] Policija
		P4334 [COI2007] Policija 题意 一个无重边的无向图,每次询问删掉一条边或删掉一个点后两个点是否联通. 思路 连通性问题,我们可以考虑使用广义圆方树解决. 对于删掉一个点的情况: ... 
- P1823 [COI2007] Patrik 音乐会的等待  单调栈 洛谷luogu
		题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的. ... 
- 【洛谷】【单调栈】P4333 [COI2007] Patrik
		--接上一篇题解,[洛谷][单调栈]P1823音乐会的等待 关于题目大意在上一篇题解里已经说清楚了,这里不再多阐述 想看题目->戳这里 [算法分析:] 在对元素a进行判断时,如果它与栈顶元素相等 ... 
- 洛谷P1823 [COI2007] Patrik 音乐会的等待
		https://www.luogu.org/problemnew/show/P1823 自己只会一个log的 设取的人的位置分别是l,r(l<r) 这个做法大概是考虑枚举r,设法对于每个r求出有 ... 
- [COI2007] Patrik 音乐会的等待 (单调栈,模拟)
		题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的. ... 
- 洛谷 1823 [COI2007] Patrik 音乐会的等待
		[题解] 维护一个单调栈即可. 但是因为有相同身高的存在,所以要稍微考虑下相同身高的处理.因为这个卡了一下下QAQ... #include<cstdio> #include<algo ... 
随机推荐
- springboot整合mybatis遇到的那些坑
			1.接口类(指*Mapper.java)在spring中注册的问题 当控制台打印如下信息: A component required a bean named '*Mapper' that could ... 
- 初学c# -- 学习笔记 小结
			学了到了好些东西, 做了一些练习. 一.C# winform Socket 1.程序主要部分只是用了 Panel.Picturebox.Label.RicheditBox四个组件,滚动条.编辑框什么的 ... 
- oracle数据库分组之后取最大或者最小值
			原始数据 --使用子查询 SELECT * FROM student s WHERE s.birthday IN (SELECT MIN(s2.birthday) FROM student s2 GR ... 
- concurrent.futures模块(进程池/线程池)
			需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ... 
- Oracle中为表设置自动增长的标识列
			-- Create sequence create sequence INNERID minvalue 1 maxvalue 99999999999999 start with 1 increment ... 
- STM32 + RC522(SPI2 和 模拟SPI)
			STM32 + RC522(SPI2 和 模拟SPI) 一. STM32 + RC522(SPI2 模式) 1. 头文件: rc522.h #include "stm32f10x.h&quo ... 
- Maven学习 四 Eclipse与Maven结合的配置
			本问承接Maven学习 三 第一步:配置本地仓库 (1)默认配置 查看 本地仓库的位置是在一个叫做setting.xml的配置文件中设置,如果我们不配置,会使用开发工具自己集成的一个setting.x ... 
- 在linux中文件的权限讲解
			1.d:directory(目录): 表示这个文件是个目录,其他的还有f(file文件)等等: 2.r:read(可读) 3.w:write(可写) 4 x :execute(可执行) 一般Linux ... 
- 原生js获取元素的子元素
			//使用firstChild //但是下面这种因为有空格,也算其子元素 <lable> <span id="onlinePerson" name="pe ... 
- 学以致用二十三-----shell脚本里调用脚本
			当前脚本可以调用其他目录下的脚本,并可以直接使用其他脚本里的函数. 首先查看脚本目录 执行net_set.sh,同时执行colos.sh 并可直接使用 color.sh中的函数 net_set.sh ... 
