zoukankan      html  css  js  c++  java
  • cf1073c 二分+二维前缀和

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 200005
    char s[maxn];
    int tmp,n,x,y,sum[2][maxn];
    map<char,int>mp;
    
    int judge(int mid){//能否在mid长度内修改完 
        for(int l=1;l+mid-1<=n;l++){
            int r=l+mid-1;
            int Y=sum[0][n]-sum[0][r]+sum[0][l-1];
            int X=sum[1][n]-sum[1][r]+sum[1][l-1];
            int tot=abs(x-X)+abs(y-Y);//在区间[l,r]要走的距离 
            if(tot<=mid)return 1;
        }
        return 0;
    }
    
    int main(){
        mp['U']=1,mp['D']=-1,mp['L']=-1,mp['R']=1;
        cin>>n>>s+1>>x>>y;
        tmp=abs(x)+abs(y);
        if(n<tmp || tmp%2!=n%2){
            puts("-1");
            return 0;
        }
        
        for(int i=1;i<=n;i++){
            if(s[i]=='U'||s[i]=='D'){
                sum[0][i]=sum[0][i-1]+mp[s[i]];
                sum[1][i]=sum[1][i-1];
            }
            else {
                sum[0][i]=sum[0][i-1];
                sum[1][i]=sum[1][i-1]+mp[s[i]];
            }
        }
        
        int ans=-1,l=0,r=n,mid;
        while(l<=r){
            mid=l+r>>1;
            if(judge(mid))
                ans=mid,r=mid-1;
            else l=mid+1;
        }
        printf("%d
    ",ans);
    }
  • 相关阅读:
    做人做事
    不骄不躁
    争取
    收入
    Windows 7下的Comodo Firewall免费防火墙
    成功水平
    成家立业
    Windows无法安装到GPT格式磁盘的根本解决办法
    安装Windows10操作系统
    安装操作系统的几种方式
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10367170.html
Copyright © 2011-2022 走看看