[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 ...
随机推荐
- 如何有效的使用google进行搜索的20个技能
每天有数百万人因为各种各样的原因使用谷歌搜索.学生们把它用于学校,商人们把它用于研究,还有数百万人把它用于娱乐.但大多数人可能没有充分利用谷歌搜索的潜力. 想要更有效地使用谷歌搜索,并得到您想要的搜索 ...
- re库的使用
re库的使用 精确匹配 如果直接给出字符,就是精确匹配.用\d可以匹配一个数字,\w可以匹配一个字母或数字 s1='00\d'#可以匹配'007',但是匹配不了'00A' s2='\d\d\d'#可以 ...
- [Codeforces 1246B] Power Products (STL+分解质因数)
[Codeforces 1246B] Power Products (STL+分解质因数) 题面 给出一个长度为\(n\)的序列\(a_i\)和常数k,求有多少个数对\((i,j)\)满足\(a_i ...
- 使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)
转自:http://blog.csdn.net/longerzone/article/details/12705507 一.前言 本文将介绍如何使用autotools生成一个Makefile文件,并在 ...
- 1、Java语言概述与开发环境——JDK JRE JVM理解
一.理解概念: 1.JDK(Java Development Kit Java开发工具包) JDK是提供给Java开发人员使用的,其中包含Java的开发工具,也包括JRE,所以安装了JDK,就不用单独 ...
- 使用ajax发送文件的三种方式及预览图片的方法,上传按钮美化
后端代码 def upload(request): if request.method == "GET": return render(request,'upload.html') ...
- LINUX 必知必会检测表--通读无关语言
一.linux和os: 1.命令:netstat tcpdump ipcs ipcrm 这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验 2.cpu 内存 硬盘 等等与系统性能调试相关的命 ...
- locale - 地域定义文件的描述
描述 地域 定义文件含有 localedef(1) 命令所需的全部信息. 定义文件由几个小节组成, 一个小节详细地描述地域的一个范畴. 语法 地域定义文件以一个包含有如下关键字的文件头开头: < ...
- netlink, PF_NETLINK - 内核与用户之间的通讯
SYNOPSIS 总揽 #include <asm/types.h> #include <sys/socket.h> #include <linux/netlink.h& ...
- 在Linux环境下部署MySql服务
之前有下载部署过几次,但是每次都会踩一些坑.特此记录在liunx下部署安装mysql的基本步骤: 1.卸载老版本的mysql find / -name mysql|xargs rm -rf 查 ...