CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)
题目链接:点击查看
题目大意:给出a个0,b个1,c个2,d个3,要求构造一种序列,使得数列两两之间绝对值之差等于1,若不能构造输出NO
题目分析:首先我们需要稍微讨论一下特殊情况,那就是对于两端的数字0和数字3,因为若这两个数字,0只能和1匹配,也就是两侧必须都是1,同理,3的两侧必须都是2,所以我们可以简单讨论一下,分为两种特殊情况:
- a>b,此时的形式只能为01交叉,且首尾都为0,必须满足:a-b==1&&c==0&&d==0,否则无解
- d>c,同上,必须满足:d-c==1&&a==0&&b==0,否则无解
处理完以上两种特殊情况后,我们就来处理一般情况,首先我们先将四个数从中间切断,分为两组形式,因为上面的特殊情况已经处理完毕了,所以现在一定满足a<=b&&c>=d,这样我们就先让每个0与1匹配,形成全为0 1排列的串,我们记为ans1,消耗完所有的a后,剩余的b我们记为bb,同理处理c和d,我们将此子串记为ans2,用2 3串消耗完d后,剩余的c我们记为cc,此时必须让多余的bb和cc互相匹配,并且使其成为ans1与ans2的桥梁,所以必须用2 1串来匹配,这个时候必须满足abs(cc-bb)<=1,允许相差至多为1,因为多出来的1可以放到最前面与0匹配,同理多出来的2可以放到最后面与3匹配,但若相差大于1的话就无法完全匹配了
到此为止,我们就已经讨论完所有的情况了,按照上面的贪心策略构造答案就好了,记得准确输出空格,以及及时return
代码:
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e6+100;int main()
{
// freopen("input.txt","r",stdin);
// ios::sync_with_stdio(false);int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);if(a>b){if(a-b==1&&!c&&!d){printf("YES\n");while(b--)printf("0 1 ");printf("0\n");return 0;}elsereturn 0*printf("NO\n");}if(d>c){if(d-c==1&&!a&&!b){printf("YES\n");while(c--)printf("3 2 ");printf("3\n");return 0;}elsereturn 0*printf("NO\n");}b-=a;c-=d;if(abs(b-c)<=1){printf("YES\n");if(b>c)printf("1 ");while(a--)printf("0 1 ");for(int i=0;i<min(b,c);i++)printf("2 1 ");while(d--)printf("2 3 ");if(c>b)printf("2");}elsereturn 0*printf("NO\n");return 0;
}
CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)相关推荐
- CodeForces - 1256C Platforms Jumping(贪心+构造)
题目链接:点击查看 题目大意:现在固定人初始时在点0处,现在我们需要跨过长度为n的一条河,到达对岸的点n+1处,给出m个木板,我们可以将这m个木板随意摆放,但相对位置不能改变,并且只能互相接触而不能互 ...
- CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)
题目链接:点击查看 题目大意:给出一个n*m的农场,其中'.'代表空地,'R'代表大米,现在有k只鸡需要分布在这个农场之中,需要满足以下条件: 每个方格都要被鸡占领 每只鸡至少占领一个方格 每只鸡占领 ...
- CodeForces - 798D Mike and distribution(构造+思维/玄学随机数)
题目链接:点击查看 题目大意:给出两个长度为n的数列,现在要求选出n/2+1个位置,使得两个序列中这些位置的和分别大于各自序列之和的一半 题目分析:题意换句话说,是需要让我们从数组中选出一半,要大于另 ...
- 贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation
题目传送门 1 /* 2 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 3 */ 4 /**************************************** ...
- 【牛客 - 318G】LLLYYY的数字思维 与【牛客 - 289J】这是一个沙雕题II(贪心构造)
题干: LLLYYY很喜欢写暴力模拟贪心思维.某一天在机房,他突然抛给了队友ppq一 个问题.问题如下: 有一个函数f (): int f(int x){ int tmp = 0; w ...
- Beautiful Sequence CodeForces - 1264B(暴力)
An integer sequence is called beautiful if the difference between any two consecutive numbers is equ ...
- 2021年度训练联盟热身训练赛第五场 H题In-place Sorting+贪心构造
题意: 给你n个小于101810^{18}1018的大数,问在可以再不改变序列位置,之改变数值中某数位的'9'变为'6'或将'6'变为'9',求的最终序列由小到大,且字典序最小. 题目: 链接:htt ...
- 【HDU - 6237】A Simple Stone Game(贪心,思维,素因子分解,数学)
题干: After he has learned how to play Nim game, Bob begins to try another stone game which seems much ...
- 【CodeForces 1265C --- Beautiful Regional Contest】
[CodeForces 1265C --- Beautiful Regional Contest] 题目来源:点击进入[CodeForces 1265C - Beautiful Regional Co ...
最新文章
- android读取大图片并缓存
- 执行cmd并获得结果_MySQL 服务无法启动 请键入 NET HELPMSG 3523 以获得更多的帮助...
- Javascript的原型链、instanceof与typeof
- react-native 相关问题
- hdu 5441 Travel(Kruskal+离线)
- python建立数据库并序列化_python之数据的序列化
- python sqlsever 时间_Python sqlalchemy时间戳及密码管理实现代码详解
- web项目jsp中无法引入js问题
- javascript判断是否手机设备+滑动事件
- java数字类型_Java数据类型
- flume拦截器及自定义拦截器
- 104 基于UDP协议的socket套接字编程
- MATLAB图像滤波去噪分析及其应用
- 园区内智慧出行标准化白皮书(2022年)
- matlab gui仿真实验,基于Matlab GUI设计的光学实验仿真
- 最常见绩效考核方法有哪些?5种有效方法介绍
- 怎样了解存在---辩证唯物主义认识论
- 关闭计算机后为什么重新启动,电脑关机后自动重启是怎么回事什么原因的解决方法 - 系统家园...
- CF Edu 53D Berland Fair 暴力,取模
- bios 刷 灵耀14_华硕灵耀Deluxe14笔记本装win10及bios设置教程(uefi+gpt)