日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uoj #118. 【UR #8】赴京赶考 水题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#118. 【UR #8】赴京趕考

Time Limit: 20 Sec

Memory Limit: 256 MB

題目連接

http://uoj.ac/problem/118

Description

高中,高中,短暫的三年。NOI是高中結業考試,而高考在每年暑假舉行。

高二暑假,這是你最后一次參加高考的機會。你已經為了高考停課很久了,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,m,表示網格圖為 n 行 m 列。

第二行 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=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';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[1]); } int solve2(int x,int y) {if(y>=x)return pre1[y]-pre1[x];return pre1[m]-pre1[x]+pre1[y]+(b[m]^b[1]); } int main() {//test;n=read(),m=read();for(int i=1;i<=n;i++){a[i]=read();if(i!=1)pre[i]=pre[i-1]+(a[i]^a[i-1]);}for(int i=1;i<=m;i++){b[i]=read();if(i!=1)pre1[i]=pre1[i-1]+(b[i]^b[i-1]);}int q=read();for(int i=0;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)));} }

?

轉載于:https://www.cnblogs.com/qscqesze/p/4580597.html

總結

以上是生活随笔為你收集整理的uoj #118. 【UR #8】赴京赶考 水题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。