uoj118 【UR #8】赴京赶考
不难发现我们直接走过去就行了
考虑到第\(i\)行的构造方法就是把\(b\)数组作为模板,每个数和\(a_i\)异或一下就可以了
于是不难发现对于一段连续相等的\(a\),它们在矩阵上就形成了完全相同的好几行
同时这个矩阵上只有两种本质不同的行,一种是\(b\)和\(1\)异或得到的,一种是和\(0\)异或得到的
显然我们从\((x_s,y_s)\)走到\((x_e,y_e)\)从中间的任意一行切换过去都是等价的,因为从\(y_s\)走到\(y_e\)在任何一行的代价都是一样的
于是我们把问题转化成了两个一维的问题,即从\(x_s\)走到\(x_e\)的代价加上从\(y_s\)走到\(y_e\)
把连续相同的一段缩成一个点,就是求一下环上的距离
代码
#include<bits/stdc++.h>
#define re register
#define min(a,b) ((a)<(b)?(a):(b))
const int maxn=1e5+5;
inline int read() {
	char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
int col[2][maxn],a[maxn],b[maxn],x[2],y[2],n,m,Q,L[2];
inline int dis(int o,int x,int y) {
	if(x>y) std::swap(x,y);
	return min(y-x,L[o]-y+x);
}
int main() {
	n=read(),m=read();
	for(re int i=1;i<=n;i++) a[i]=read();
	for(re int j=1;j<=m;j++) b[j]=read();
	int tot=1;col[0][1]=1;
	for(re int i=2;i<=n;i++)
		tot+=(a[i]!=a[i-1]),col[0][i]=tot;
	if(a[n]==a[1]) {
		for(re int i=n;i&&col[0][i]==tot;--i) col[0][i]=1;
		--tot;
	}
	L[0]=tot;tot=1;col[1][1]=1;
	for(re int i=2;i<=m;i++)
		tot+=(b[i]!=b[i-1]),col[1][i]=tot;
	if(b[m]==b[1]) {
		for(re int i=m;i&&col[1][i]==tot;--i) col[1][i]=1;
		--tot;
	}
	L[1]=tot;Q=read();
	while(Q--) {
		x[0]=read(),y[0]=read(),x[1]=read(),y[1]=read();
		printf("%d\n",dis(0,col[0][x[0]],col[0][x[1]])+dis(1,col[1][y[0]],col[1][y[1]]));
	}
	return 0;
}
												
											uoj118 【UR #8】赴京赶考的更多相关文章
- uoj #118. 【UR #8】赴京赶考 水题
		
#118. [UR #8]赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description ...
 - #118. 【UR #8】赴京赶考
		
链接:#118. [UR #8]赴京赶考 高中,高中,短暂的三年.NOI是高中结业考试,而高考在每年暑假举行. 高二暑假,这是你最后一次参加高考的机会.你已经为了高考停课很久了,OI的知识很久没管了. ...
 - UOJ Round #8 赴京赶考 解题报告
		
算法零 $n,m \le 100, q \le 10$ 的话,直接给网格中的每一个格点都建一个点,然后该怎么最短路就怎么最短路,该怎么并查集+BFS就怎么并查集+BFS. 复杂度 $O(qnm)$,可 ...
 - ur c题练习
		
ur的c果然sxbk啊 ur5:“三个莫比乌斯反演掷地有声"——摘自v(c)f(z)k(y)语录,无删改 ur2:有根树分治裸题,复杂度玄学$O(n\sqrt{n})$. 首先,转化为统计k ...
 - db2 with ur
		
这几天查询DB2数据库,老遇到select * from XXX with ur, 好奇ur是什么作用,现在记录一下. DB2中,共有四种隔离级:RS,RR,CS,UR,DB2提供了这4种不同的保护级 ...
 - 【UOJ#33】【UR#2】树上GCD      有根树点分治 + 容斥原理 + 分块
		
#33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...
 - uoj #31. 【UR #2】猪猪侠再战括号序列 贪心
		
#31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...
 - UR #13 Yist
		
第一次打UR,打了一个半小时就弃疗了QAQ 这是我唯一一道考试的时候做出来的题目,其他两道连暴力都懒得写了 很容易发现对于每个要删除的点 我们找到左边第一个比他小的不用删除的点,右边第一个比他小的不用 ...
 - MIT教授将网页开发整合为完整独立的程式语言Ur/Web
		
MIT 的软体技术教授 Adam Chlipala 设计了新的 Ur/Web 程式语言,这是一个整合 HTML.CSS.XML.SQL 及 JavaScript 等网路标准的“完整独立”语言,强调快速 ...
 
随机推荐
- hdu2089数位DP
			
旁听途说这个名字很久了,了解了一下. 改题目的意思是给你若干区间,让你找寻区间内不含62或4的数. 首先暴力必然T...那么实际上就是说,想办法做一种预处理,在每次输入的时候取值运算就可以了. 既然是 ...
 - 使用Jedis操作Redis-使用Java语言在客户端操作---set类型
			
原文地址:http://www.cnblogs.com/lixianyuan-org/p/9509696.html 1 //测试set数据类型 2 /** 3 * 在Redis中,我们可以将Set类型 ...
 - PAT_A1091#Acute Stroke
			
Source: PAT A1091 Acute Stroke (30 分) Description: One important factor to identify acute stroke (急性 ...
 - svn向服务器添加新建文件夹
			
tip: 1)提交文件分为两步,先将要提交的文件加入缓存区,然后将文件提交 2)add:添加的意思.commit:提交的意思 第一步:加入缓存区(如图) 1)选择要提交的文件 2)右键svn---&g ...
 - 【Linux】- Systemd 命令篇
			
转自:阮一峰的网络日志 Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置. 一.由来 历史上,Linux 的启动一直采用init进程. 下面的命令用来启动服务. ...
 - 第一章 Linux是什么
			
Linux是核心与系统调用接口两层中间的操作系统 不同硬件的功能函数并不相同,IBM的Power CPU与Inter的x86架构不同,所以同一套操作系统是不能在不同的硬件平台上面运行的.也就是说,每种 ...
 - print的简单使用
			
import time num=20 for i in range(num): print("#", end="") 结果如下: 加个强制刷新 num=20 f ...
 - 这是<一起找打的约定>的改良版本
			
-- CREATE TABLE class ( -- cid INT(25)auto_increment PRIMARY KEY, -- caption VARCHAR(50) not NULL -- ...
 - pip3 常用操作
			
清华大学pip镜像 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ # 设置为默认 pip install pip -U pip config set ...
 - Shell test命令(Shell [])详解,附带所有选项及说明
			
test 是 Shell 内置命令,用来检测某个条件是否成立.test 通常和 if 语句一起使用,并且大部分 if 语句都依赖 test. test 命令有很多选项,可以进行数值.字符串和文件三个方 ...