P3566 [POI2014] KLO-Bricks 题解-程序员宅基地

技术标签: c++  

P3566 [POI2014] KLO-Bricks 题解

大致意思:

现在有 n n n 种颜色的砖块,第一个必须放第 p p p 种颜色,最后一定得放第 q q q 种颜色,剩余中间的需要自己构造,使得每相邻两个砖块的颜色不相等,有解随便输出任意一种,无解则输出 0 0 0

大致思路:

这是一道很好的贪心构造题,最优的方案,肯定就是先放最少最多,用最多的来分隔少的,因为这样最多的可以放置的更为均匀,以达到我们实现最优方案的目的,不然会导致多的前面放的过少,后面聚在一堆,实现出来的代码显示的是无解。当然如果当前最多的颜色与前面一项相等,那么我们要取一二大的,以此类推。

而我们知道了,想要实现此方法需要一边运行放颜色,一边排序,如果直接用用排序函数,占用时间太大,肯定会超时,那么我们就可以用到优先队列,它是可以边运行边排序的。

我们可以用变量 s s s,记录总砖块数,接着通过循环实现放砖块:

  • 当前最多的砖块他的下标与前面相等,那么我可以用 t t t 记录最多砖块的数量,把它从队列中移除,找到第二多的砖块,将这个砖块的数量减 1 1 1

  • 当前最多的砖块他的下标与前面不相等,直接用此砖块,将这个砖块的数量减 1 1 1

当然,在过程中我们还要判断,本种砖块数是否大于 0 0 0,和此时队列里还有没有砖块,如果没有砖块,则无解。

代码实现:

#include<bits/stdc++.h>
using namespace std;
int n,p,y,s;
int ar[1000005];
bool f;
struct node{
    
	int x;
	int id;
}a[1000005];
bool operator <(node l,node r){
    
    if (l.x != r.x) return l.x<r.x;
	if (l.id == y) return 0;
    if (r.id == y) return 1;
    return 0; 
}
priority_queue<node> q;

int main(){
    
	cin>>n>>p>>y;
	for(int i=1;i<=n;i++){
    
		cin>>a[i].x;
		if(i==p) a[i].x--;
		if(i==y) a[i].x--;
		s+=a[i].x;
		a[i].id=i;
		q.push(node{
    a[i].x,i});
	}

	int u=p;
	ar[s+2]=y;
	for(int i=2;i<=s+1;i++){
    
		node t=q.top();q.pop();
		if(t.x>0) t=t;
        else{
    
            f=1;
            break;
        }
		if(t.id!=u&&t.x>0){
    
			ar[i]=t.id;
			q.push(node{
    t.x-1,t.id});
			u=ar[i];
		}else if(q.size()&&t.x>0){
    
			node v=q.top();
			q.pop();
			ar[i]=v.id;
			q.push(node{
    v.x-1,v.id});
			q.push(node{
    t.x,t.id});
			u=ar[i];
		}else if(!q.size()){
    
			f=1;
			break;//不加 RE,我找了两位大佬才调出来
		}
	}
	if(f){
    
		cout<<"0";
		return 0;
	}
	for(int i=1;i<=s+1;i++){
    
		if(ar[i]==ar[i+1]){
    
			f=1;
		}
	}
	if(f){
    
		cout<<"0";
		return 0;
	}
	cout<<p<<" ";
	for(int i=2;i<=s+1;i++){
    
		cout<<ar[i]<<" ";
	}
	cout<<ar[s+2];
	return 0;
}

这样这道题就结束啦!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangzihan1026/article/details/138162476

智能推荐

单片机机器周期怎么计算公式_概述51单片机-程序员宅基地

文章浏览阅读6.5k次。单片机是什么?在学之前必须要明白这个东西是什么,怎么用,为什么能这样用。理解这三个问题,那么51单片机就可以学得很好。单片机的对比这里只对8051与8052进行对比:型号 Flash(ROM)RAMI/O定时/计数器 中断源 引脚数AT89C51 4KB 128B 32 2 5 40AT89c52 8KB 256B 32 3 8 40型号 FlashROMRAMI/..._51单片机机器周期计算公式

springboot整合rabbitMQ系列8 设置消息过期时间TTL,即存活时间_springboot rabbitmq 消息过期时间-程序员宅基地

文章浏览阅读2.9k次。主要有2种方式,如果同时指定了Message TTL和Queue TTL,则优先较小的那一个。: 指定一条消息的过期时间。 给队列设置消息过期时间,队列中的所有消息都有同样的过期时间。 队列设置的方式import org.springframework.amqp.core.Binding;import org.springframework.amqp.core.BindingBuilder;import org.springframework.amqp.core.DirectE_springboot rabbitmq 消息过期时间

熊海cms代码审计-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏18次。0x00 前言​ 做这次代码审计的时候,距离看《代码审计:企业级web代码安全架构》一书已经过去了差不多一个月的时间了。借着这次机会,开启自己的代码审计之旅吧!0x01 seay自动审计环境搭建本地留了一份进行源码审计,虚拟机win7下搭建作为攻击利用本地审计把cms丢进seay源代码审计系统里,先自动审计一番发现34个可疑漏洞,接下来要做的就是逐一排查,以防误报0x02 ..._熊海cms代码审计

BRD、MRD、PRD文档撰写工具介绍-----产品经理深入浅出课程_prd,mrd,brd是用什么写的-程序员宅基地

文章浏览阅读9k次。本文是针对多贝网 刘文智老师 产品经理深入浅出课程 课时9的总结。 课时9简要介绍了产品经理专业技能之BRD、MRD、PRD文档的撰写。 本文主要介绍撰写三大文档的主要工具。 1.Office2013 包括Excel、Power Point、Word。 Excel文档可用于版式设计、逻辑结构表现,简单的函数计算,数据组织(筛_prd,mrd,brd是用什么写的

ninjia: /usr/bin/env: ‘python’: No such file or directory 问题的解决方案_env: python: no such file or directory-程序员宅基地

文章浏览阅读2.7k次。**问题:**当我安装ninjia,执行./configure.py --bootstrap出现提示:/usr/bin/env: ‘python’: No such file or directory解决方法:执行以下命令即可:sudo apt updatesudo apt install python-is-python3_env: python: no such file or directory

语雀批量导出与图片下载_语雀python备份-程序员宅基地

文章浏览阅读3.6k次,点赞4次,收藏5次。在云笔记方面我一般使用wolai和语雀,本地笔记用Typora,但是这两个云笔记各有利弊因此今天这篇文章就记录一下语雀如何进行图片本地化保存以及文档批量备份下载在实际的使用中,有几个网站是可以获取到语雀图片的(不用重新上传,自动转存)但是还是需要将语雀图片的后缀给去掉,第一种方法是无需运行脚本,如果Typora支持正则,直接正则匹配(注意可能会变,自己根据实际情况来进行替换),将这串字符给全部替换为空;第二种需要进行跑python脚本,然后运行(举例:)三、Markdown中的图片转换到本地可以根据自_语雀python备份

随便推点

【机器学习】(周志华--西瓜书) 真正例率(TPR)、假正例率(FPR)与查准率(P)、查全率(R)_真正例率和假正例率,查准率,查全率,概念,区别,联系-程序员宅基地

文章浏览阅读1.7w次。Q:试述真正例率(TPR)、假正例率(FPR)与查准率(P)、查全率(R)之间的联系。查全率: 真实正例被预测为正例的比例真正例率: 真实正例被预测为正例的比例显然查全率与真正例率是相等的。查准率:预测为正例的实例中真实正例的比例假正例率: 真实反例被预测为正例的比例两者并没有直接的数值关系。敏感度,召回率,命中率或真实阳性率(TPR)特异性,选择性或真阴..._真正例率和假正例率,查准率,查全率,概念,区别,联系

Python Django 版本对应表以及Mysql对应版本_django版本和mysql对应关系-程序员宅基地

文章浏览阅读6.1k次。1.Python和Django 版本对应关系图Django versionPython versions1.82.7,3.2(until the end of 2016),3.3,3.4,3.51.9,1.102.7,3.4,3.51.112.7,3.4,3.5,3.6, 3.7 (added in 1.11.17)2.03.4,3.5,3.6..._django版本和mysql对应关系

Maven的pom.xml文件结构之基本配置packaging和多模块聚合结构_pom <packaging>-程序员宅基地

文章浏览阅读4.1w次,点赞19次,收藏27次。1. packagingpackaging给出了项目的打包类型,即作为项目的发布形式,其可能的类型。在Maven 3中,其可用的打包类型如下:jar,默认类型warejbearrarparpommaven-plugin2.multi-modulesMaven 3支持Maven项目的多模块(multi-modules)结构。这样的Maven项目也被称为聚合项目,通常由一个_pom

Composer 原理(二) -- 小丑_composer repositories-程序员宅基地

文章浏览阅读194次。Composer是一个非常流行的PHP包依赖管理工具,已经取代PEAR包管理器,对于PHP开发者来说掌握Composer是必须的.对于使用者来说Composer非常的简单,通过简单的一条命令将需要的代码包下载到vendor目录下,然后开发者就可以引入包并使用了.其中的关键在于你项目定义的composer.json,可以定义项目需要依赖的包(可能有多个),而依赖的包可能又依赖其他的包(这就是组件..._composer repositories

W5500+F4官网TCPClient代码出现IP读取有问题,乱码问题_w5500 ping 网络助手 乱码 send(sock_tcps,tcp_server_buff,-程序员宅基地

文章浏览阅读756次。1.开发板:STM32F407;2.STM32F407+W5500代码:3.出现的问题:(1)串口助手打印出来的IP、网关地址等与自设的静态IP、网关等不匹配;(2)网络数据收发为乱码;4.解决方法出现这些现象都是源于一个问题,SPI的时序设置有问题。我这里是速度过快,所以将SPI_BaudRatePrescaler_2改为SPI_BaudRatePrescaler_8后以上问题均解决。..._w5500 ping 网络助手 乱码 send(sock_tcps,tcp_server_buff,len);

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

推荐文章

热门文章

相关标签