zoukankan      html  css  js  c++  java
  • CF830A Office Keys(贪心)

    CF830A Office Keys

    【题目链接】CF830A Office Keys

    【题目类型】贪心

    &题意:

    有n个人,k个钥匙,一个目的地,求让n个人都回到目的地的最短时间,每个人都要拿钥匙才能回目的地

    &题解:

    这题做的时候没有认真想样例,如果仔细想的话就能发现n个人选的n个钥匙一定是连续的(在排过序之后),你可以这样想:
    如果n个人直接去目的地,那么就肯定是连续的区间了吧,如果这个区间里钥匙数够,就可以直接回去了,如果不够,肯定是在区间的两边寻找剩下的钥匙,所以一定是连续的区间

    &代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define ll long long
    #define fo(i,a,b) for(int i=(a);i<=(b);i++)
    #define fd(i,a,b) for(int i=(a);i>=(b);i--)
    #define cle(a,v) memset(a,(v),sizeof(a))
    const int maxn = 2e3 + 7;
    int n, m, q;
    int a[maxn], b[maxn];
    int main() {
    #ifndef ONLINE_JUDGE
    	freopen("E:1.in", "r", stdin);
    #endif
    	scanf("%d%d%d", &n, &m, &q);
    	fo(i, 0, n - 1) scanf("%d", &a[i]);
    	fo(i, 0, m - 1) scanf("%d", &b[i]);
    	sort(b, b + m);
    	sort(a, a + n);
    	int ans = 0x7fffffff;
    	for(int i = 0; i <= m - n; i++) {
    		int ma = 0;
    		for(int j = 0; j < n; j++) {
    			ma = max(ma, abs(a[j] - b[i + j]) + abs(b[i + j] - q));
    		}
    		ans = min(ans, ma);
    	}
    	printf("%d
    ", ans);
    	return 0;
    }
    
  • 相关阅读:
    链表相加
    Unity 摄像机跟随
    整数反转
    两数和
    频繁项集挖掘思路
    有关于二进制的乘法计算(原码一位乘)
    JAVA面向对象(下)
    JAVAAPI
    JAVA面向对象()上)
    JAVA基础第一章
  • 原文地址:https://www.cnblogs.com/s1124yy/p/7182337.html
Copyright © 2011-2022 走看看