链接:#118. 【UR #8】赴京赶考

高中,高中,短暂的三年。NOI是高中结业考试,而高考在每年暑假举行。

高二暑假,这是你最后一次参加高考的机会。你已经为了高考停课很久了,OI的知识很久没管了。你并没有能力用一年时间补起别人三年的OI课程。这是你的最后一战,如果你失败了,可能就不能工地搬砖只能去清华了。

这天你背上行囊赴京赶考。此时全国交通主要靠瞬间传送装置。全国交通网络可以抽象为一张 nn 行 mm 列的网格图。行依次编号为 ,…,n1,…,n,列依次编号为 ,…,m1,…,m。

有 n+mn+m 个为  或  的整数 a1,…,an,b1,…,bma1,…,an,b1,…,bm。对于 ≤i≤n1≤i≤n,≤j≤m1≤j≤m,如果 ai=bjai=bj 那么网格图上第 ii 行第 jj 列上标着  否则标着 。

你的家在第 xsxs 行第 ysys 列,高考考场在第 xexe 行第 yeye 列。现在你想从家出发到高考考场去。每次你可以:

向上移动一行。(如果你在第一行那么移动后会到最后一行去)
向下移动一行。(如果你在最后一行那么移动后会到第一行去)
向左移动一列。(如果你在第一列那么移动后会到最后一列去)
向右移动一列。(如果你在最后一列那么移动后会到第一列去)
对于每次移动,如果移动前的格子上标的数跟移动后的格子上标的数不同,那么就要耗费 分钟时间等待瞬移装置调整配置,否则不耗时间。 现在你想知道你从家出发到高考考场最少需要花多长时间。 输入格式
第一行两个正整数 n,mn,m,表示网格图为 nn 行 mm 列。 第二行 nn 个整数,分别表示 a1,…,ana1,…,an。保证 a1,…,an∈{,}a1,…,an∈{,}。 第三行 mm 个整数,分别表示 b1,…,bmb1,…,bm。保证 b1,…,bm∈{,}b1,…,bm∈{,}。 接下来一个正整数 qq。 接下来 qq 行,每行四个整数 xs,ys,xe,yexs,ys,xe,ye。表示询问如果你的家在第 xsxs 行第 ysys 列,高考考场在第 xexe 行第 yeye 列时的最少花费时间。 输出格式
共 qq 行,每行一个整数表示最少花费多少分钟。 样例一
input output 样例二
input output 限制与约定
测试点编号 n,mn,m的规模 qq的规模
n,m≤100n,m≤ q≤10q≤ n≤,m=1n≤,m= q≤105q≤ n,m≤105n,m≤ q≤105q≤ 时间限制:1s1s
空间限制:256MB

题干

如果10^5个询问,每次都无脑遍历肯定不行。

想一想横向移动,和纵向移动是互不影响的,那我单独考虑变成两个一维的。

但,10^5次遍历一个10^5的图也还不够。。。

我们又想到可以用个前缀和,表示从第一个位置到当前位置所用的时间

询问时:正着走一遍,倒着走一遍,横纵相加就行。

#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define LL long long
int n,m,a[],b[],q,xs,ys,xe,ye;
int pre[],pree[];
int work1(int x,int y)
{
if(y>=x)
return pre[y]-pre[x];
return pre[n]-pre[x]+pre[y]+(a[n]^a[]);
}
int work2(int x,int y)
{
if(y>=x)
return pree[y]-pree[x];
return pree[m]-pree[x]+pree[y]+(b[m]^b[]);
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%d",&a[]);
for(int i=;i<=n;i++)
scanf("%d",&a[i]),pre[i]=pre[i-]+(a[i]^a[i-]);
scanf("%d",&b[]);
for(int j=;j<=m;j++)
scanf("%d",&b[j]),pree[j]=pree[j-]+(b[j]^b[j-]); scanf("%d",&q);
for(int i=;i<=q;i++)
{
scanf("%d%d%d%d",&xs,&ys,&xe,&ye);
int t1=min(work1(xs,xe),work1(xe,xs)),t2=min(work2(ys,ye),work2(ye,ys));
printf("%d\n",t1+t2);
}
return ;
}

代码

#118. 【UR #8】赴京赶考的更多相关文章

  1. uoj #118. 【UR #8】赴京赶考 水题

    #118. [UR #8]赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description ...

  2. uoj118 【UR #8】赴京赶考

    题目 不难发现我们直接走过去就行了 考虑到第\(i\)行的构造方法就是把\(b\)数组作为模板,每个数和\(a_i\)异或一下就可以了 于是不难发现对于一段连续相等的\(a\),它们在矩阵上就形成了完 ...

  3. UOJ Round #8 赴京赶考 解题报告

    算法零 $n,m \le 100, q \le 10$ 的话,直接给网格中的每一个格点都建一个点,然后该怎么最短路就怎么最短路,该怎么并查集+BFS就怎么并查集+BFS. 复杂度 $O(qnm)$,可 ...

  4. ur c题练习

    ur的c果然sxbk啊 ur5:“三个莫比乌斯反演掷地有声"——摘自v(c)f(z)k(y)语录,无删改 ur2:有根树分治裸题,复杂度玄学$O(n\sqrt{n})$. 首先,转化为统计k ...

  5. db2 with ur

    这几天查询DB2数据库,老遇到select * from XXX with ur, 好奇ur是什么作用,现在记录一下. DB2中,共有四种隔离级:RS,RR,CS,UR,DB2提供了这4种不同的保护级 ...

  6. 【UOJ#33】【UR#2】树上GCD 有根树点分治 + 容斥原理 + 分块

    #33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...

  7. 118. Pascal's Triangle

    题目: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, ...

  8. 118. 119. Pascal's Triangle -- 杨辉三角形

    118. Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, ...

  9. leetcode 118

    118. Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, ...

随机推荐

  1. 51nod1934:受限制的排列 (分治+组合数)

    对于一个  11 到  nn 的排列  p1,p2,⋯,pnp1,p2,⋯,pn ,我们可以轻松地对于任意的  1≤i≤n1≤i≤n 计算出  (li,ri)(li,ri) ,使得对于任意的  1≤L ...

  2. ubuntu16.04 ROS安转及RVIZ启动

    1.软件中心配置 首先打开软件和更新对话框,打开后按照下图进行配置(确保你的"restricted", "universe," 和 "multiver ...

  3. 5.oracle中一个字段中存储'a','b'与'a'与a的写法,存储过程中与之对应

    select '''a'',''b''' from dual; --'a','b' select '''a''' from dual; --'a' select 'a' from dual; --a

  4. 用Merge存储引擎中间件实现MySQL分表

    觉得一个用Merge存储引擎中间件来实现MySQL分表的方法不错. 可以看下这个博客写的很清楚--> http://www.cnblogs.com/xbq8080/p/6628034.html ...

  5. Excel的poi缓存问题

    Excel的poi缓存问题 背景: 最近工作需要,需要完成生成新的Excel,然后从Excel中读取包含公式的文本内容. 问题: 当程序中修改公式对应的单元格数据变化时,公式获取的值仍然还是原来的值, ...

  6. 4 pyspark学习---RDD

    开始新的东西,其实很多操作在第二篇的时候就有所介绍啦.在这里继续学习一遍加深一下印象. 1关于RDD (1) RDD-----Resilient Distributed Dataset,弹性分布式数据 ...

  7. java命令行编译运行、打包jar

    过程:java文件→class文件→exe执行文件 --------------------------------------------- 一.编译:从.java生成.class   (1)ecl ...

  8. Flutter实战视频-移动电商-65.会员中心_订单区域UI布局

    65.会员中心_订单区域UI布局 我的订单区域 member.dart写我的标题的方法 布局使用瓦片布局 先做修饰,decoration颜色的背景,下边线的样式 //我的订单标题 Widget _or ...

  9. myeclipse 2014 没有Install New Software的解决办法

    要安装离线zip包,但在myeclipse2014的help菜单中找不到 Install New Software 解决如下: help--install from site--add--archiv ...

  10. CodeForces - 377A Maze BFS逆思维

    Maze Pavel loves grid mazes. A grid maze is an n × m rectangle maze where each cell is either empty, ...