屯题1

Posted ckr1225

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了屯题1相关的知识,希望对你有一定的参考价值。

1.UOJ118  赴京赶考

考虑a[i]!=a[i+1],那么无论哪一行,这两个相邻的走过去都需要1的代价

同样的b[i]!=b[i+1],那么无论哪一列,这两个相邻的走过去都需要1的代价

所以(x,y)走到(xx,yy)等价于x走到xx的最小代价(1维情况即可)

+y走到yy的最小代价(也是1维情况)

维护一个前缀和就好了

代码如下

#include<bits/stdc++.h>
#define N 500005
using namespace std;
int n,m,Q,xc,xs,yc,ys,a[N],b[N],sumh[N],suml[N];
int main(){
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    for (int i=1;i<=m;i++) scanf("%d",&b[i]);
    for (int i=2;i<=n;i++) sumh[i]=sumh[i-1]+(a[i]!=a[i-1]);
    for (int i=2;i<=m;i++) suml[i]=suml[i-1]+(b[i]!=b[i-1]);
    scanf("%d",&Q);
    while (Q--){
        scanf("%d%d%d%d",&xs,&ys,&xc,&yc);
        if (xs>xc) swap(xs,xc);
        if (ys>yc) swap(ys,yc);
        int tmp=sumh[xc]-sumh[xs];
        tmp=min(tmp,sumh[n]-sumh[xc]+(a[1]!=a[n])+sumh[xs]);
        int ans=tmp;
        tmp=suml[yc]-suml[ys];
        tmp=min(tmp,suml[m]-suml[yc]+(b[1]!=b[m])+suml[ys]);
        printf("%d
",tmp+ans);
    }
    return 0;
}

 

以上是关于屯题1的主要内容,如果未能解决你的问题,请参考以下文章

vs 2010代码片段

vs 2010代码片段

1 代码片段1

sublime text3 增加代码片段(snipper)

web代码片段

JavaScript单行代码,也就是代码片段