一 题面

  E. Minimum Array

二 分析

  注意前提条件:$0 \le  a_{i} \lt n$ 并且 $0 \le  b_{i} \lt n$。那么,我们可以在$a_{i}$中任取一个数进行分析,发现为满足字典序最小,在$b$中找到$n-a_{i}$就是最优解。

  接下来分析$b$,在$b$中是不一定找得到$n-a_{i}$的。所以需要分析如何找到此情况下的最优解。

  假设$a_{i} = 3$,$n = 4$,那么$b_{i}$对应的最优情况是$b_{i} = 1$,可以把所有$b_{i}$的所有取值情况分析以下:

$b_{i} = 0$  $(a_{i}+b_{i})\%n = 3$

$b_{i} = 1$  $(a_{i}+b_{i})\%n = 0$

$b_{i} = 2$  $(a_{i}+b_{i})\%n = 1$

$b_{i} = 3$  $(a_{i}+b_{i})\%n = 2$

  应该已经发现了规律了,就是以$n-a_{i}$为起点的一个循环。那么我们只要每次保证贪心取最小就可以了,这里需要运用$multiset$进行复杂度优化,但一定要注意查找的时候不能用$find$而要用$lower\_bound$,这样就可以解决了。

三 AC代码

 #include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + ;
int A[MAXN], B[MAXN]; int main()
{
//freopen("input.txt", "r", stdin);
int N, x;
multiset<int > ATree;
scanf("%d", &N);
for(int i = ; i < N; i++)
scanf("%d", &A[i]);
for(int i = ; i < N; i++)
{
scanf("%d", &B[i]);
ATree.insert(B[i]);
}
for(int i = ; i < N; i++)
{
x = N - A[i];
auto p = ATree.lower_bound(x);
if(p == ATree.end() )
p = ATree.begin();
x = *p;
printf("%d%c", (x + A[i]) % N , i == N - ? '\n':' ');
ATree.erase(p);
}
return ;
}

  

Codeforces Round #555 (Div. 3) E. Minimum Array 【数据结构 + 贪心】的更多相关文章

  1. Codeforces Round #555 (Div. 3) E. Minimum Array

    题意:b数组可以自由排序,c[i]=(a[i]+b[i])%n. 题目中要求c数组的字典序是最小的.那么我们需要尽量满足前面的c[i],才能使字典序最小. 我们知道a[i]和b[i]都是[0,n-1] ...

  2. Codeforces Round #555 (Div. 3) E. Minimum Array (贪心,二分,set)

    题意:给你两个长度为\(n\)的数组\(a\)和\(b\),元素值在\([0,n-1]\),可以对\(b\)数组的元素任意排序,求新数组\(c\),满足\(c_i=(a_i+b_i)\ mod\ n\ ...

  3. Codeforces Round #297 (Div. 2)C. Ilya and Sticks 贪心

    Codeforces Round #297 (Div. 2)C. Ilya and Sticks Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: xxx  ...

  4. 老年OIer的Python实践记—— Codeforces Round #555 (Div. 3) solution

    对没错下面的代码全部是python 3(除了E的那个multiset) 题目链接:https://codeforces.com/contest/1157 A. Reachable Numbers 按位 ...

  5. CodeForces Round #555 Div.3

    A. Reachable Numbers 代码: #include <bits/stdc++.h> using namespace std; ; int N; set<int> ...

  6. Codeforces Round #555 (Div. 3)[1157]题解

    不得不说这场div3是真的出的好,算得上是从我开始打开始最有趣的一场div3.因为自己的号全都蓝了,然后就把不经常打比赛的dreagonm的号借来打这场,然后...比赛结束rank11(帮dreago ...

  7. Codeforces Round #555 (Div. 3) c2 d e f

    c2:Increasing Subsequence (hard version) 那边小取那边,然后相等比较后面的长度 #include<bits/stdc++.h> using name ...

  8. Codeforces Round #258 (Div. 2) . Sort the Array 贪心

    B. Sort the Array 题目连接: http://codeforces.com/contest/451/problem/B Description Being a programmer, ...

  9. Codeforces Round #555 (Div. 3) AB

    A:    http://codeforces.com/contest/1157/problem/A 题意:每次加到10的整数倍之后,去掉后面的0,问最多有多少种可能. #include <io ...

随机推荐

  1. [Selenium]通过JavaScript来对隐藏的元素执行操作

    对不可见元素进行操作时,如果通过普通的方式不可行,可以尝试用Javascript Scroll hidden element into view ((JavascriptExecutor) drive ...

  2. [Selenium]刷新页面 Refresh page

    5 different ways to refresh a webpage using Selenium Webdriver   Here are the 5 different ways, usin ...

  3. 分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab

    分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab 本文介绍一致性算法: 2PC 到 3PC 到 Paxos 到 Raft 到 Zab 两类一致性算法(操作原 ...

  4. RocketMQ:Cannot allocate memory

    使用Storm本地模式消费RocketMQ数据的时候, 消费一点数据之后,就会出现如下错误: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os:: ...

  5. 关于Android控件EditText的属性InputType的一些经验,java组合多个参数

    关于Android控件EditText的属性InputType的一些经验 2013-11-14 15:08:02|  分类: 默认分类|举报|字号 订阅       1.InputType属性在代码中 ...

  6. POJ 3057 Evacuation (二分匹配)

    题意:给定一个图,然后有几个门,每个人要出去,但是每个门每个秒只能出去一个,然后问你最少时间才能全部出去. 析:初一看,应该是像搜索,但是怎么保证每个人出去的时候都不冲突呢,毕竟每个门每次只能出一个人 ...

  7. python decimal和fractions模块

    1.简介 默认,浮点数学缺乏精确性 decimal 模块提供了一个 Decimal 数据类型用于浮点数计算.相比内置的二进制浮点数实现 float这个类型有助于金融应用和其它需要精确十进制表达的场合, ...

  8. csdn的博客上传word图片

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  9. 查看WEB ADI所对应的包过程函数

    SELECT BNEINTERFACESBEO.APPLICATION_ID       , BNEINTERFACESBEO.INTERFACE_CODE       , BNEINTERFACES ...

  10. 如何查看非自己提交的请求的结果 - 深入浅出Oracle EBS之杂项技术荟萃

    如何查看非自己提交的请求的结果定位要找的请求SQL举例:SELECT req.request_id,       fcp.user_concurrent_program_name,       usr ...