#1514 : 偶像的条件

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

小Hi的学校正面临着废校的大危机。面对学校的危机,小Hi同学们决定从ABC三个班中各挑出一名同学成为偶像。

成为偶像团体的条件之一,就是3名团员之间的身高差越小越好。

已知ABC三个班同学的身高分别是A1..AN, B1..BM 和 C1..CL。请你从中选出3名同学Ai, Bj, Ck使得D=|Ai-Bj|+|Bj-Ck|+|Ck-Ai|最小。

输入

第一行包含3个整数,N, M和L。

第二行包含N个整数,A1, A2, ... AN。(1 <= Ai <= 100000000)

第三行包含M个整数,B1, B2, ... BM。(1 <= Bi <= 100000000)

第四行包含L个整数,C1, C2, ... CL。(1 <= Ci <= 100000000)

对于30%的数据, 1 <= N, M, L <= 100

对于60%的数据,1 <= N, M, L <= 1000

对于100%的数据,1 <= N, M, L <= 100000

输出

输出最小的D。

样例输入
3 3 3
170 180 190
195 185 175
180 160 200
样例输出
10

#include<cmath>
#include<ctime>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+5;
int n,m,l,a[N],b[N],c[N];
int ans=2e9;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
inline int ABS(int x){return x>0?x:-x;
}
int main(){
//    freopen("sh.txt","r",stdin);n=read();m=read();l=read();for(int i=1;i<=n;i++) a[i]=read();a[0]=-1e9;a[n+1]=1e9;for(int i=1;i<=m;i++) b[i]=read();b[0]=-1e9;b[m+1]=1e9;for(int i=1;i<=l;i++) c[i]=read();c[0]=-1e9;c[l+1]=1e9;sort(a+1,a+n+1);sort(b+1,b+m+1);sort(c+1,c+l+1);if(n<=100){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int k=1;k<=l;k++){ans=min(ans,ABS(a[i]-b[j])+ABS(b[j]-c[k])+ABS(c[k]-a[i]));}}}}else{for(int i=1,p1,p2,p3,p4;i<=n;i++){p1=lower_bound(b+1,b+m+1,a[i])-b;p2=upper_bound(b+1,b+m+1,a[i])-b;if(ABS(b[p1])<1e9){p3=lower_bound(c+1,c+l+1,a[i])-c;p4=upper_bound(c+1,b+l+1,a[i])-c;if(ABS(c[p3])<1e9) ans=min(ans,ABS(a[i]-b[p1])+ABS(b[p1]-c[p3])+ABS(c[p3]-a[i]));if(ABS(c[p4])<1e9) ans=min(ans,ABS(a[i]-b[p1])+ABS(b[p1]-c[p4])+ABS(c[p4]-a[i]));}if(ABS(b[p2])<1e9){p3=lower_bound(c+1,c+l+1,a[i])-c;p4=upper_bound(c+1,b+l+1,a[i])-c;if(ABS(c[p3])<1e9) ans=min(ans,ABS(a[i]-b[p2])+ABS(b[p2]-c[p3])+ABS(c[p3]-a[i]));if(ABS(c[p4])<1e9) ans=min(ans,ABS(a[i]-b[p2])+ABS(b[p2]-c[p4])+ABS(c[p4]-a[i]));}}    }printf("%d\n",ans);return 0;
}

70分代码(贪挂了)

//100
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+5;
int n,m,l,a[N],b[N],c[N];
int ans=2e9;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
inline int ABS(int x){return x>0?x:-x;
}
int main(){n=read();m=read();l=read();for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=m;i++) b[i]=read();for(int i=1;i<=l;i++) c[i]=read();sort(a+1,a+n+1);sort(b+1,b+m+1);sort(c+1,c+l+1);for(int i=1,p1,p2,p3,p4;i<=n;i++){p1=lower_bound(b+1,b+m+1,a[i])-b;p2=lower_bound(c+1,c+l+1,a[i])-c;for(int j=0;j<2;j++) for(int k=0;k<2;k++){p3=p1-j;p4=p2-k;if(p3<1) p3++;if(p4<1) p4++;if(p3>m) p3--;if(p4>l) p4--;ans=min(ans,ABS(a[i]-b[p3])+ABS(b[p3]-c[p4])+ABS(c[p4]-a[i]));}}    printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/shenben/p/6754100.html

[Offer收割]编程练习赛15 A.偶像的条件[贪心]相关推荐

  1. 最简真分数c语言,HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)...

    描述 给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少? 输入 两个整数N个K. 对于30%的数据,1 <= N <= 1000000 对于100%的数据,1 < ...

  2. [Offer收割]编程练习赛63

    命名 暴力 1 #include <bits/stdc++.h> 2 using namespace std; 3 char S[1111], T[1111], a[1111], b[11 ...

  3. hihocoder offer收割编程练习赛11 B 物品价值

    思路: 状态压缩 + dp. 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> ...

  4. hihocoder offer收割编程练习赛12 B 一面砖墙

    思路: 就是求哪个长度出现的次数最多. 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <algorit ...

  5. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  6. hihocoder offer收割编程练习赛8 B 拆字游戏

    思路: 模拟,dfs. 注意题目中的trick,输出一块的时候不要把其他块也输出了. 实现: 1 #include <cstring> 2 #include <iostream> ...

  7. [hihocoder][Offer收割]编程练习赛46

    AEIOU 选出的子串中由AEI构成的子串和由OU构成的子串之间并没有什么关系,分别算出最长的加起来. #pragma comment(linker, "/STACK:102400000,1 ...

  8. [Offer收割]编程练习赛12 题目1 : 歌德巴赫猜想

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 哥德巴赫猜想认为"每一个大于2的偶数,都能表示成两个质数之和". 给定一个大于2的偶数N,你能找到两个 ...

  9. hiho #1272 买零食 [Offer收割]编程练习赛2

    #1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰 ...

最新文章

  1. inputstream的大小为0_李太阳2020302期排列三推荐:本期两码看好0、3
  2. c# 窗口句柄问题 。
  3. Spring与SpringMVC集成出现的问题
  4. IntelliJ IDEA 2020 基础设置
  5. 第一次接触终极事务处理——Hekaton
  6. 循环序列模型 —— 1.10 长短期记忆(LSTM)
  7. [2019杭电多校第七场][hdu6656]Kejin Player
  8. js基础知识汇总12
  9. win10 预览版启用 Hyper-V 虚拟机 装 boot2docker找不到菜单按钮问题
  10. 二元置信椭圆r语言_医学统计与R语言:Logistic Distribution
  11. C#.Net 扩展方法
  12. Mac版WebStorm破解方案
  13. 变桨距风力发电机液压系统设计
  14. ddr老化测试_老化测试标准
  15. HTML5——HTML5元素周期表
  16. 百度智能云发布全新云智一体3.0架构,自研技术贯穿各层级
  17. Scratch-简易时钟制作
  18. Symbian 入门
  19. 无光驱情况下window XP系统安装盘使用nlite集成raid卡驱动
  20. 计算机网络学习笔记——IP Header Checksum(校验和)的计算方法

热门文章

  1. 修改Windows 7默认的软件安装路径
  2. (一)SpringBoot 整合 MyBatis
  3. 【牛客网多校】19-7-25-H题 Magic Line
  4. 前端开发的正确姿势——各种文件的目录结构规划及引用
  5. 将excel文件中的数据导入到mysql
  6. 大约C++ const 全面总结
  7. 随机函数rand()算法
  8. c++正确处理 is-a has-a关系
  9. SQL Server导入导出工具弱爆了
  10. JAAS:灵活的Java安全机制[转]