uoj #118. 【UR #8】赴京赶考 水题
#118. 【UR #8】赴京赶考
Time Limit: 20 Sec
Memory Limit: 256 MB
题目连接
http://uoj.ac/problem/118
Description
高二暑假,这是你最后一次参加高考的机会。你已经为了高考停课很久了,OI的知识很久没管了。你并没有能力用一年时间补起别人三年的OI课程。这是你的最后一战,如果你失败了,可能就不能工地搬砖只能去清华了。
这天你背上行囊赴京赶考。此时全国交通主要靠瞬间传送装置。全国交通网络可以抽象为一张 n 行 m 列的网格图。行依次编号为 1,…,n,列依次编号为 1,…,m。
有 n+m 个为 0 或 1 的整数 a1,…,an,b1,…,bm。对于 1≤i≤n,1≤j≤m,如果 ai=bj 那么网格图上第 i 行第 j 列上标着 0 否则标着 1。
你的家在第 xs 行第 ys 列,高考考场在第 xe 行第 ye 列。现在你想从家出发到高考考场去。每次你可以:
向上移动一行。(如果你在第一行那么移动后会到最后一行去)
向下移动一行。(如果你在最后一行那么移动后会到第一行去)
向左移动一列。(如果你在第一列那么移动后会到最后一列去)
向右移动一列。(如果你在最后一列那么移动后会到第一列去)
对于每次移动,如果移动前的格子上标的数跟移动后的格子上标的数不同,那么就要耗费 1 分钟时间等待瞬移装置调整配置,否则不耗时间。
现在你想知道你从家出发到高考考场最少需要花多长时间。
Input
第二行 n 个整数,分别表示 a1,…,an。保证 a1,…,an∈{0,1}。
第三行 m 个整数,分别表示 b1,…,bm。保证 b1,…,bm∈{0,1}。
接下来一个正整数 q。
接下来 q 行,每行四个整数 xs,ys,xe,ye。表示询问如果你的家在第 xs 行第 ys 列,高考考场在第 xe 行第 ye 列时的最少花费时间。
Output
共 q 行,每行一个整数表示最少花费多少分钟。
Sample Input
1 2
1
0 1
2
1 2 1 2
1 1 1 2
Sample Output
0
1
HINT
n,m≤105 q≤105
题意
题解:
n,m≤105,q≤105 的话,我们发现我们可以突破维度的界限,把每一维拆开分别考虑,最后的答案就是每一维的答案的和。
这为啥是对的呢?
对于 ai≠ai+1,无论 bj 取啥值,你从 (i,j) 穿越到 (i+1,j) 的时候,都必然会花费等待时间;否则如果 ai=ai+1 的话,就必然不会花费等待时间。所以一条路线的总等待时间可以拆分成各个维度的等待时间的和。
然后这个问题就变成一维问题啦,直接用算法一的搞法就可以了。
复杂度 O(n+m+q),可以拿下100分。
代码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define test freopen("test.txt","r",stdin)
#define maxn 2000001
#define mod 10007
#define eps 1e-6
const int inf=0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fLL;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
//************************************************************************************** int a[maxn];
int b[maxn];
int pre[maxn];
int pre1[maxn];
int n,m;
int solve1(int x,int y)
{
if(y>=x)
return pre[y]-pre[x];
return pre[n]-pre[x]+pre[y]+(a[n]^a[]);
}
int solve2(int x,int y)
{
if(y>=x)
return pre1[y]-pre1[x];
return pre1[m]-pre1[x]+pre1[y]+(b[m]^b[]);
}
int main()
{
//test;
n=read(),m=read();
for(int i=;i<=n;i++)
{
a[i]=read();
if(i!=)
pre[i]=pre[i-]+(a[i]^a[i-]);
}
for(int i=;i<=m;i++)
{
b[i]=read();
if(i!=)
pre1[i]=pre1[i-]+(b[i]^b[i-]);
}
int q=read();
for(int i=;i<q;i++)
{
int x1=read(),y1=read(),x2=read(),y2=read();
printf("%d\n",min(solve1(x1,x2),solve1(x2,x1))+min(solve2(y1,y2),solve2(y2,y1)));
}
}
uoj #118. 【UR #8】赴京赶考 水题的更多相关文章
- #118. 【UR #8】赴京赶考
链接:#118. [UR #8]赴京赶考 高中,高中,短暂的三年.NOI是高中结业考试,而高考在每年暑假举行. 高二暑假,这是你最后一次参加高考的机会.你已经为了高考停课很久了,OI的知识很久没管了. ...
- 【UOJ#82】【UR #7】水题生成器(贪心)
[UOJ#82][UR #7]水题生成器(贪心) 题面 UOJ 题解 把\(n!\)的所有约数搜出来,这个个数不会很多. 然后从大往小能选则选就好了. #include<iostream> ...
- 【UR #7】水题走四方
题目描述 今天是世界水日,著名的水题资源专家蝈蝈大臣发起了水题走四方活动,向全世界发放成千上万的水题. 蝈蝈大臣是家里蹲大学的教授,当然不愿意出门发水题啦!所以他委托他的助手欧姆来发. 助手欧姆最近做 ...
- #82. 【UR #7】水题生成器
链接:http://uoj.ac/problem/82 今天是世界水日,著名的水题资源专家蝈蝈大臣向世界宣布了他的一项新发明 —— 水题生成器. 每道题目都有一个正整数的难度值.水题生成器虽然强大但是 ...
- URAL 1136 Parliament 二叉树水题 BST后序遍历建树
二叉树水题,特别是昨天刚做完二叉树用中序后序建树,现在来做这个很快的. 跟昨天那题差不多,BST后序遍历的特型,找到最后那个数就是根,向前找,比它小的那块就是他的左儿子,比它大的那块就是右儿子,然后递 ...
- 【BZOJ】初级水题列表——献给那些想要进军BZOJ的OIers(自用,怕荒废了最后的六月考试月,刷刷水题,水水更健康)
BZOJ初级水题列表——献给那些想要进军BZOJ的OIers 代码长度解释一切! 注:以下代码描述均为C++ RunID User Problem Result Memory Time Code_Le ...
- hdu4530 水题
题意: 小Q系列故事--大笨钟 Time Limit: 600/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- HDOJ 2317. Nasty Hacks 模拟水题
Nasty Hacks Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- ACM :漫漫上学路 -DP -水题
CSU 1772 漫漫上学路 Time Limit: 1000MS Memory Limit: 131072KB 64bit IO Format: %lld & %llu Submit ...
随机推荐
- 【python】python+behave自动化
留坑,后面再写,先写下request对http请求的校验.
- CKEditor和IMCE构建drupal编辑器
1. 安装并启用CKEditor和IMCE模块. 2. 配置CKEditor: 3. 配置用户的权限即可.最终效果图:
- js 判断输入是否为正整数
javascript代码如下: var re = new RegExp("^[1-9][0-9]*$"); if (re.test("11k")) { cons ...
- cmd命令 chcp
chcp是“change code page”的缩写.(关于代码页的相关知识详见:http://www.cnblogs.com/minisculestep/articles/4920992.html)
- 【LeetCode】58 - Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...
- 11个实用经典的SQL小贴士
学习工作之余,在没有要解决问题的压力之下,还是建议系统的看看书,对于一些认为没啥用的知识点,也建议去仔细的看看,练练手,说不定什么时候就用到了,到时也好有针对性的去查,不至于盲目的按照自己的思路,重复 ...
- Python中的并发编程
简介 我们将一个正在运行的程序称为进程.每个进程都有它自己的系统状态,包含内存状态.打开文件列表.追踪指令执行情况的程序指针以及一个保存局部变量的调用栈.通常情况下,一个进程依照一个单序列控制流顺序执 ...
- DOM笔记(七):开发JQuery插件
在上一篇笔记本中,讲解了如何利用jQuery扩展全局函数和对象:DOM笔记(六):怎么进行JQuery扩展? 在这篇笔记本中,将开发一个简单的动画插件,名称是example-plugin,用其实现一个 ...
- Epic - Tic Tac Toe
N*N matrix is given with input red or black.You can move horizontally, vertically or diagonally. If ...
- Scrum概述
• 敏捷方法是一类软件开发流程的泛称: • 敏捷方法是相对于传统的瀑布式软件过程提出的: • 敏捷方法可以用敏捷宣言(4条).敏捷原则(12条)来概括: • 敏捷原则通过一系列的敏捷实践来体现出来: ...