原题链接:http://codeforces.com/contest/830/problem/A

题意:在一条数轴上分别有n个人和k把钥匙(n<=k),以及一个目的地,每个人要各自拿到一个钥匙后到达目的地。每个人的移动速度都是1, 问所有人都到达目的地的最短时间。

思路:转化一下题意,就是求耗时最长的人所用的最短时间。

我们可以二分答案x,然后对排序后的人以及钥匙进行枚举,进行从左至右搭配。 这里check函数中返回false的条件是从左至右所有人都能在x的时间内到达目的地,而计算这些人到达目的地的时间是:取最近的一对人与钥匙计算,为了每个人耗时最少(贪心),这是最优的。

AC代码:

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int MAXN=;
int n,k;
int a[MAXN],b[MAXN],S;
bool check(LL x){
int p=;
for(int i=;i<=n;i++){
while(p<=k){
p++;
if(1LL*(abs(a[i]-b[p])+abs(b[p]-S))<=x) break;
}
if(p>k) return false;
}
return true;
}
int main()
{
scanf("%d %d %d", &n , &k, &S);
for(int i=;i<=n;i++) scanf("%d", &a[i]);
for(int i=;i<=k;i++) scanf("%d", &b[i]);
sort(a+, a+n+);
sort(b+, b+k+);
LL l=,r=2e9+;
LL mid;
while(l<r){
mid=(l+r)/;
if(check(1LL*mid)) r=mid;
else l=mid+;
}
printf("%d\n", l);
}

这道题也可以用dp来做: dp[i][j]表示前i个人有前j个钥匙的最优解,利用01背包思想可以在O(n*k)时间内求出答案。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int INF=2e9+;
const int MAXN=;
int n,k;
int a[MAXN],b[MAXN],S;
int dp[MAXN][MAXN];
int main(){
scanf("%d %d %d", &n , &k, &S);
for(int i=;i<=n;i++) scanf("%d", &a[i]);
for(int i=;i<=k;i++) scanf("%d", &b[i]);
sort(a+,a++n);
sort(b+,b++k);
for(int i=; i<=n; i++)
for(int j=; j<=k; j++)
dp[i][j] = INF;
for(int i=; i<=k; i++) dp[][i]=;
for(int i=; i<=n; i++)
for(int j=i; j<=k; j++){
dp[i][j] = min(dp[i][j-],max(dp[i-][j-],abs(a[i]-b[j])+abs(b[j]-S)));
}
printf("%d\n", dp[n][k]);
return ;
}

最新文章

  1. 二叉查找树 C++实现(含完整代码)
  2. Java version 32转64位
  3. 《HBase实战》
  4. LeetCode1:Two Sum
  5. 说说Java中的枚举(一)
  6. Ubuntu根目录下各文件夹的功能详细介绍
  7. reactjs入门到实战(二)---- jxs详解
  8. Getting started: A skeleton application
  9. ajax学习笔记1
  10. 【HTML】Advanced4:Accessible Links
  11. C的快速趋向实验 --&gt;
  12. 【持久化框架】Mybatis与Hibernate的详细对比
  13. [linux]chown和chmod命令
  14. zzuli--2134: 维克兹的进制转换(规律)
  15. nodejs, 阿里oss上传下载图片
  16. Python Excel 多sheet 多条数据 自定义写入
  17. Linux 各种软件的安装-ElasticSearch
  18. Origin绘制双Y轴图的方法
  19. ASP.NET MVC编程——路由
  20. C#程序集系列08,设置程序集版本

热门文章

  1. SpringBoot系列:二、SpringBoot的配置文件
  2. template标签就相当于React中的fragment
  3. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_5_综合案例_文件搜索
  4. python学习笔记(数据类型)
  5. VGA时序及其原理(转载)
  6. Mac基本配置
  7. node.js—创建、删除、追加文件等方法汇总
  8. 简历内容-resume
  9. RD Client、TeamViewer连接主机
  10. Consul集群Server+Client模式