[CF1054C]Candies Distribution
题目:Candies Distribution
传送门:http://codeforces.com/problemset/problem/1054/C
分析:
方法一:
1)类似拓扑排序的做法。
2)当$L_i,R_i$均为$0$时,这个数就是当前最大的数,可以移除并且去掉他带来的影响,即左边的$R_i$减一,右边得$L_i$减一。
3)当$L_i,R_i$均为$0$时,就当这个点入度为$0$,移除影响就相当于去掉与其相邻的边。
#include <bits/stdc++.h>
using namespace std;
const int maxN=;
vector<int> tp;
int n,L[maxN],R[maxN],val[maxN];
int main() {
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",L+i);
for(int i=;i<=n;++i)scanf("%d",R+i);
int tn=n;
for(;;){
tp.clear();
for(int i=;i<=n;++i)
if(!L[i] && !R[i]){tp.push_back(i);val[i]=tn;L[i]=R[i]=-;}
if(tp.size()==)break;
tn-=tp.size();
for(auto it:tp){
for(int i=;i<it;++i)--R[i];
for(int i=it+;i<=n;++i)--L[i];
}
}
if(tn)puts("NO");
else{
puts("YES");
for (int i=;i<=n;++i)printf("%d ", val[i]);
}
return ;
}
方法二:
学到了一种神奇的构造。
4)如果这个序列是存在,第$i$个小朋友分糖数为$ n-(L_i-R_i) $必然是不会冲突的,检查这个序列,判断是否满足题意。
5)这道题事实上在询问有多少小朋友糖比自己多,无论最终分糖方案是什么,得到相同糖的小朋友的分组是一样的。
#include<bits/stdc++.h>
using namespace std;
const int N = ;
int L[N],R[N],res[N];
int main(){
int n;scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",L+i);
for(int i=;i<=n;++i)scanf("%d",R+i);
for(int i=;i<=n;++i)res[i]=n-L[i]-R[i];
for(int i=;i<=n;++i)
for(int j=i+;j<=n;++j){
R[i]-=res[j]>res[i];
L[j]-=res[j]<res[i];
}
for(int i=;i<=n;++i)
if(L[i]||R[i]){puts("NO");return ;}
puts("YES");
for(int i=;i<=n;++i)printf("%d ",res[i]);
return ;
}
如果保证有合法解,求一种可行解,然后范围又极大,可以用第二种方法直接构造呀
[CF1054C]Candies Distribution的更多相关文章
- [题解]Mail.Ru Cup 2018 Round 1 - C. Candies Distribution
[题目] C. Candies Distribution [描述] n个小朋友排排坐吃糖糖,小朋友从左到右编号1到n.每个小朋友手上有一定数量的糖.对于第i个小朋友来说,编号比他小的小朋友中有li个小 ...
- Mail.Ru Cup 2018 Round 1
A. Elevator or Stairs? 签. #include <bits/stdc++.h> using namespace std; ]; int main() { while ...
- poj 3159 Candies 差分约束
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 22177 Accepted: 5936 Descrip ...
- POJ 3159 Candies (栈优化spfa)
Candies 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/J Description During the kinderga ...
- POJ 3159 Candies(差分约束,最短路)
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 20067 Accepted: 5293 Descrip ...
- (poj)3159 Candies
题目链接:http://poj.org/problem?id=3159 Description During the kindergarten days, flymouse was the monit ...
- poj 3159 Candies
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 25776 Accepted: 7033 Descrip ...
- poj3159 Candies(差分约束)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Candies Time Limit: 1500MS Memory Limit ...
- (简单) POJ 3159 Candies,Dijkstra+差分约束。
Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the he ...
随机推荐
- [DS+Algo] 010 二叉树的遍历
二叉树遍历 深度优先 一般用递归 一些名词 遍历方式 英文 先序 Preorder 中序 Inorder 后序 Postorder 广度优先 一般用队列 Python 代码示例 class Node( ...
- iview报错[Vue warn]: Error in render: "TypeError: ctx.injections.tableRoot.$scopedSlots[ctx.props.column.slot] is not a function"
原因是我使用了iview的<Table>组件,我给Table组件的columns中定义了4个含有slot的列,但是实际在<Table>中只使用了其中3个,导致的报错. 也就是说 ...
- Linux 创建与删除(5)
相对于Windows下的右键新建文件与删除,我更喜爱Linux下的命令式创建与删除,真的方便.不过Windows下也可以借助工具来实现,比如git bash.cmder等等终端工具. 创建文件 新建文 ...
- gcc编译工具生成动态库和静态库
一. 库的分类 1.1. 静态库(.a) 1.1.1. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大.所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 1. ...
- Codeforces 1262E Arson In Berland Forest(二维前缀和+二维差分+二分)
题意是需要求最大的扩散时间,最后输出的是一开始的火源点,那么我们比较容易想到的是二分找最大值,但是我们在这满足这样的点的时候可以发现,在当前扩散时间k下,以这个点为中心的(2k+1)2的正方形块内必 ...
- 思维体操: HDU1022Train Problem I
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- How to download and compile Android kernel goldfish ?
Prerequisites Assuming that we already downloaded the android-ndk-r12b and sdk. w4118@w4118:~/utils$ ...
- 打印Java main参数
public class Main { public static void main(String args[]){ System.out.println("打印main方法中的输入参数, ...
- Paper Reading_Computer Architecture
最近(以及预感接下来的一年)会读很多很多的paper......不如开个帖子记录一下读paper心得 Computer Architecture Last level cache (llc) perf ...
- pip和pip3的区别
安装了python3之后,会有pip3 1. 使用pip install XXX 新安装的库会放在这个目录下面 python2.7/site-packages 2. 使用pip3 install XX ...