一 题面

  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]怎样等待元素出现之后再消失,譬如Loading icon

    界面上有些元素是要先等它出现,再等它消失,譬如loading icon 这个是等多个loading icon出现后消失 /** * Wait for loading icon disappear in ...

  2. MySQL redo log及recover过程浅析

    写在前面:作者水平有限,欢迎不吝赐教,一切以最新源码为准. InnoDB redo log 首先介绍下Innodb redo log是什么,为什么需要记录redo log,以及redo log的作用都 ...

  3. jsoncpp学习

    // MyJsonTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <fstream> #includ ...

  4. Java设计模式(6)——建造者模式

    定义:Builder模式也叫建造者模式或者生成器模式,Builder模式是一种对象创建型模式之一,用来隐藏复合对象(对象的属性为另一个对象的引用)的创建过程,它把复合对象的创建过程交给Builder, ...

  5. java类加载器的一些测试

    package classloader; import java.lang.reflect.Method; import org.junit.Test; import com.example.Samp ...

  6. maven pom.xml几个特殊的插件

    1. surefire插件 Maven Surefire 插件有一个 test 目标,该目标被绑定在了 test 阶段.  test 目标执行项目中所有能在 src/test/java 找到的并且文件 ...

  7. [转]How do I run msbuild from the command line using Windows SDK 7.1?

    本文转自:http://stackoverflow.com/questions/6319274/how-do-i-run-msbuild-from-the-command-line-using-win ...

  8. Android-Camera+SurfaceView

    Camera相机是属于硬件,每台设备的Camera硬件配置的参数都是不一样的,Camera通常是用来拍照,扫描二维码等等 AndroidManifest.xml配置Camera需要的权限: <! ...

  9. day 20 02 模块的导入

    day 20 02  模块的导入 1.模块:就是一个文件:放置一些通用的有独立功能程序或者函数.比如建立一个py文件,文件名为:demo,文件里面的内容:demo模块: print('嗨大米')def ...

  10. TFS 2015新功能之一,当前迭代查询标记

    TFS 2015发布在即,有幸作为MVP提前获得了TFS的RTM版本,下面就TFS 2015的新功能做一些介绍:   TFS 2015新功能之一,当前迭代查询标记 在TFS的查询中,可以将" ...