zoukankan      html  css  js  c++  java
  • 【Codeforces Round #424 (Div. 2) D】Office Keys

    Link:http://codeforces.com/contest/831/problem/D

    Description

    有n个人,它们都要去一个终点,终点位于p;
    但是,在去终点之前,他们都要先拿到一把钥匙;
    钥匙散落在k个位置(k>=n)
    然后告诉你n个人的起始位置;
    然后每个人,每秒钟移动一个单位长度;
    问你最少需要多长时间,可以使得,每个人都拿到钥匙,且都走到终点;

    Solution

    把初始位置a数组和钥匙位置b数组,都分别升序排;
    假设有一个长度为n的窗口;
    用这个窗口,一点一点在b数组上往右移动;
    每次罩到的n个位置;
    假设窗口上的第i个位置,罩到了数组上的第j个位置;
    认为是第i个人走到第j把钥匙的地方,然后再到终点p
    这样,按照人的位置和钥匙的位置顺序对应这一原则;
    有k-n+1种窗口罩住数组的方法
    枚举,得到最小的就好;
    贪心

    NumberOf WA

    1

    Reviw

    常见的贪心策略。

    Code

    #include <bits/stdc++.h>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define ms(x,y) memset(x,y,sizeof x)
    #define Open() freopen("F:\rush.txt","r",stdin)
    #define Close() ios::sync_with_stdio(0)
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
    const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
    const double pi = acos(-1.0);
    const int N = 2100;
    
    int n,k;
    LL a[N],b[N],p;
    
    int main(){
        //Open();
        //Close();
        scanf("%d%d%lld",&n,&k,&p);
        rep1(i,1,n) scanf("%lld",&a[i]);
        sort(a+1,a+1+n);
        rep1(i,1,k) scanf("%lld",&b[i]);
        sort(b+1,b+1+k);
        LL ans = 1e18;
        rep1(i,1,k-n+1){
            int delta = i-1;
            LL ma = 0;
            rep1(j,1,n)
                ma = max(ma,abs(a[j]-b[j+delta])+abs(b[j+delta]-p));
            ans = min(ans,ma);
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    python 多线程测试
    python 多线程join()
    python 多线程 t.setDaemon(True):
    线程锁
    python 多线程
    模板渲染和参数传递.
    求两个数组的交集
    java数组并集/交集/差集(补集)
    java各种集合的线程安全
    页面跳转和重定向
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626191.html
Copyright © 2011-2022 走看看