Professor GukiZ and Two Arrays

题解:

将a数组都sort一遍之后, b数组也sort一遍之后。

可以观察得到 对于每一个ai来说, 整个数组bi是一个V型的。

并且对于ai+1的最优解一定是在ai的右边。

然后我们将a数组 和 b数组枚举一遍。

然后再将a数组22组合, b数组22组合之后, 再枚举一遍。

代码:

#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const int _inf = 0xc0c0c0c0;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL _INF = 0xc0c0c0c0c0c0c0c0;
const LL mod = (int)1e9+;
const int N = 4e6 + ;
int a[N], b[N];
struct Node{
int v, l, r;
bool operator<(const Node & t) const{
return v < t.v;
}
}A[N], B[N];
LL ans;
pll ansa, ansb;
LL suma = , sumb = ;
int f;
LL cal(int i, int j){
LL tsuma = suma - A[i].v + B[j].v;
LL tsumb = sumb - B[j].v + A[i].v;
return abs(tsuma - tsumb);
}
void Find(int n, int m){
if(!n || !m) return ;
sort(A+, A++n); sort(B+, B++m);
for(int i = , j = ; i <= n; ++i){
while((j+) <= m && cal(i,j) >= cal(i,j+)) ++j;
if(ans > cal(i,j)){
ans = cal(i, j);
ansa = pll(A[i].l, B[j].l);
ansb = pll(A[i].r, B[j].r);
}
}
}
int main(){
int n, m;
scanf("%d", &n);
f += (n==);
for(int i = ; i <= n; ++i){
scanf("%d", &a[i]);
A[i] = {a[i], i, };
suma += a[i];
}
scanf("%d", &m);
for(int i = ; i <= m; ++i){
scanf("%d", &b[i]);
B[i] = {b[i], i, };
sumb += b[i];
}
ans = abs(suma - sumb); ansa = ansb = {, };
Find(n, m);
int atot = , btot = ;
for(int i = ; i <= n; ++i){
for(int j = i+; j <= n; ++j){
A[++atot] = {a[i]+a[j], i, j};
}
}
for(int i = ; i <= m; ++i){
for(int j = i+; j <= m; ++j){
B[++btot] = {b[i]+b[j], i, j};
}
}
Find(atot, btot);
printf("%lld\n", ans);
if(ansa.fi == ){
puts("");
}
else if(ansb.se == ){
puts("");
printf("%d %d\n", ansa.fi, ansa.se);
}
else {
puts("");
printf("%d %d\n", ansa.fi, ansa.se);
printf("%d %d\n", ansb.fi, ansb.se);
}
return ;
}

CodeForces 620D Professor GukiZ and Two Arrays 双指针的更多相关文章

  1. codeforces 620D Professor GukiZ and Two Arrays

    #include <bits/stdc++.h> using namespace std; + ; const long long inf = 1e18; int n, m; long l ...

  2. Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays 二分

    D. Professor GukiZ and Two Arrays 题目连接: http://www.codeforces.com/contest/620/problem/D Description ...

  3. Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays

    Professor GukiZ and Two Arrays 题意:两个长度在2000的-1e9~1e9的两个序列a,b(无序);要你最多两次交换元素,使得交换元素后两序列和的差值的绝对值最小:输出这 ...

  4. 【CodeForces 620D】Professor GukiZ and Two Arrays

    题 题意 两个数列,一个有n个数,另一个有m个数,让你最多交换两次两个数列的数,使得两个数列和的差的绝对值最小,求这个差的绝对值.最少交换次数.交换数对 分析 交换0次.1次可得到的最小的差可以枚举出 ...

  5. CodeForces 620A Professor GukiZ's Robot

    水题 #include<cstdio> #include<cstring> #include<cmath> #include<stack> #inclu ...

  6. Educational Codeforces Round 6 A. Professor GukiZ's Robot 水

    A. Professor GukiZ's Robot   Professor GukiZ makes a new robot. The robot are in the point with coor ...

  7. 【24.67%】【codeforces 551C】 GukiZ hates Boxes

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. 【74.89%】【codeforces 551A】GukiZ and Contest

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  9. codeforces 551 C GukiZ hates Boxes

    --睡太晚了. ..脑子就傻了-- 这个题想的时候并没有想到该这样-- 题意大概是有n堆箱子从左往右依次排列,每堆ai个箱子,有m个人,最開始都站在第一个箱子的左边, 每个人在每一秒钟都必须做出两种选 ...

随机推荐

  1. 【iOS】The filename 未命名.ipa in the package contains an invalid character(s)

    提交 APP 到苹果官网审核时遇到了这个问题,如图: 其实就是不支持中文,随便换个英文名就行了. 参考:http://blog.csdn.net/u011439689/article/details/ ...

  2. 一个项目中:只能存在一个 WebMvcConfigurationSupport (静态文件失效之坑)

    一个项目中:只能存在一个 WebMvcConfigurationSupport 在一个项目中WebMvcConfigurationSupport只能存在一个,多个的时候,只有一个会生效. 静态文件访问 ...

  3. Go“一个包含nil指针的接口不是nil接口”踩坑

    最近在项目中踩了一个深坑--"Golang中一个包含nil指针的接口不是nil接口",总结下分享出来,如果你不是很理解这句话,那推荐认真看下下面的示例代码,避免以后写代码时踩坑. ...

  4. Spring浅入浅出——不吹牛逼不装逼

    Spring浅入浅出——不吹牛逼不装逼 前言: 今天决定要开始总结框架了,虽然以前总结过两篇,但是思维是变化的,而且也没有什么规定说总结过的东西就不能再总结了,是吧.这次总结我命名为浅入浅出,主要在于 ...

  5. ajax定义与开发最简五步骤

    ajax是什么? a (async异步)  j (javascript)  a (and)  x (xml)即异步的javascript和xml ajax特点:异步 不刷新整个页面 (局部刷新) we ...

  6. RocketMQ中Broker的刷盘源码分析

    上一篇博客的最后简单提了下CommitLog的刷盘  [RocketMQ中Broker的消息存储源码分析] (这篇博客和上一篇有很大的联系) Broker的CommitLog刷盘会启动一个线程,不停地 ...

  7. Hadoop 系列(七)—— HDFS Java API

    一. 简介 想要使用 HDFS API,需要导入依赖 hadoop-client.如果是 CDH 版本的 Hadoop,还需要额外指明其仓库地址: <?xml version="1.0 ...

  8. centOS 如何查看知道自己的版本号

    今天遇到一个尴尬的问题 , 竟然找不到centOS7x这个版本系统 然后我就问大佬们,大佬们1810 是哪哪哪个版本说的我还是懵逼 然后我就发挥我那不要脸的精神 问:'这是有什算发算的吗'  很是尴尬 ...

  9. C语言tips_1 关于&& || ! 的优先级

    关于&& || ! 三种操作的优先级 测试如下 简要分析 假设&&>|| 则结果为1 假设||>&& 则结果为0 结果为1 得证 & ...

  10. echarts legend 限制规定显示个数,显示省略号,修改默认样式

    类似百度统计,有的时候legend的个数比较多,但是前端需要控制初始化显示的个数,以及最多显示的条数,先看效果图: 先给代码: <!DOCTYPE html> <html lang= ...