Codeforces#642 (Div. 3) D. Constructing the Array

前端实现微信扫一扫的思路 本篇文章的关键点就是讲解了我在实现处理多张二维码的场景时的思路,利用canvas遮挡识别过的二维码这个思路是pbk-bin大佬最先想到的,在实现这个需求以后还是很感叹这个思路的巧妙。👏pbk-bin🎁~如果文章对你有帮助,不妨赠人玫瑰,手有余香,预计将会在下篇更新较为完整的微信扫一扫界面和功能。 阅读详情

题目链接

题意:

给一个长度为n的空序列,然后往里面填1-n的数字;

int cnt=1;
找序列中最长(如果多个最长则取最左边的序列)的连续全空区间:并且赋值cnt++;循环这个操作n次:

eg:
Consider the array a of length 5 (initially a=[0,0,0,0,0]). Then it changes as follows:

Firstly, we choose the segment [1;5] and assign a[3]:=1, so a becomes [0,0,1,0,0];
then we choose the segment [1;2] and assign a[1]:=2, so a becomes [2,0,1,0,0];
then we choose the segment [4;5] and assign a[4]:=3, so a becomes [2,0,1,3,0];
then we choose the segment [2;2] and assign a[2]:=4, so a becomes [2,4,1,3,0];
and at last we choose the segment [5;5] and assign a[5]:=5, so a becomes [2,4,1,3,5].

分析:

一开始做法是开两个queue,算是一个贪心做法,但是发现难以处理不同批次的同长度区间;于是想到了优先队列写法

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <climits>
#include <queue>
#include <stack>
#include <map>
//
using namespace std;
const int INF = 0x3f3f3f3f;//1.06e9大小
const int mod1 = 1e9 + 7;
const int mod2 = 998244353;
const int mod3 = 1e9;
const double PI = 3.14159265;
const double eps =1e-10;
typedef unsigned long long ULL;
typedef long long LL;
#define debug printf("**debug**\n")
#define ms(x, n) memset(x,n,sizeof(x))
/*
*/
struct node
{
	int l,r;
	int w;
	bool operator < (const node a) const
	{
		if(w==a.w)
			return l>a.l;
		return w<a.w;
	}
};
int a[200001];
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		priority_queue<node>q;
		q.push({1,n,n-1+1});
		int cnt=1;
		while(!q.empty())
		{
			auto t=q.top();
			q.pop();
			int l=t.l,r=t.r;
			if((r-l+1)%2)
			{
				a[(l+r)/2]=cnt++;
				if(l<(l+r)/2)q.push({l,(l+r)/2-1,((l+r)/2-l)});
				if(r>(l+r)/2)q.push({(l+r)/2+1,r,(r-(l+r)/2)});
			}
			else
			{
				a[(l+r-1)/2]=cnt++;
				if(l<(l+r-1)/2)q.push({l,(l+r-1)/2-1,((l+r-1)/2-l)});
				if(r>(l+r-1)/2)q.push({(l+r-1)/2+1,r,r-(l+r-1)/2});
			}
		}
		for(int i=1;i<=n;i++)
		{
			printf("%d ",a[i]);
		}
		printf("\n");
	}
	return 0;
}

对于优先队列维护结构体的数值的时候,我们写法也会像sort(from,to,cmp)的cmp重载一样:

struct node
{
	int l,r;
	int w;
	bool operator < (const node a) const
	{
		if(w==a.w)
			return l>a.l;
		return w<a.w;
	}
};

用{内容}重载运算符‘<‘;

这个写法因为右边是堆顶 (队列首), 又是大根堆,于是<,然后用{比较内容}重载这个运算符;

uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释 uniapp实现文本的展开与收起功能,uniapp展开全部和收起,uniapp里文本的展开与收起,uniapp中文本内容超出规定行数后展开收起的处理,UNIAPP兼容h5、微信小程序多行文本展开或收起,uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文),uni-app中文本过长-实现折叠与展开效果,中文本内容超出规定行数(字数)后展开收起的处理,超出部分...显示,uniapp适用于uniapp多行文本溢出显示...,多行文本展开或收起,uni-app-文本展开/收起折叠功能,支 阅读详情

相关推荐

Nestjs框架: 集成 Prisma

NestJS官方文档提供了两种数据库相关的内容:Techniques下的数据库板块和Recipes下的具体数据库集成方案。本文以Prisma为例,演示了如何集成Prisma到NestJS项目中。首先创建NestJS项目并安装Prisma,配置MySQL数据库连接。通过Prisma CLI初始化项目、定义数据模型并生成迁移文件。接着创建Prisma模块和服务,配置Prisma客户端连接数据库。最后在控制器中注入PrismaService实现数据查询。整个过程包含了Docker启动MySQL、Prisma模型定

Wang的专栏 1293

2020.11.27哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)

A 抗疫必胜1 水题 不解释 #include<bits/stdc++.h> using namespace std; int main() { cout<<"V"<<" "<<"V"<<endl; cout<<" "<<"V"<<" "<<"V"<<endl; cout<<" "<<"V"<<" "<<"

Suryxin's blogs 753

ROS 2 Slam Toolbox实战:从零跑通2D激光建图

SLAM(同步定位与地图构建)是移动机器人实现自主导航的基础技术,其核心在于通过传感器数据实时估计位姿并构建环境栅格地图。slam_toolbox作为ROS 2 Humble及后续LTS版本官方主推的2D SLAM后端,采用图优化+闭环检测架构,兼顾实时性、鲁棒性与工程可维护性。相比cartographer和hector_slam,它原生支持ROS 2、参数精简、诊断友好,特别适合硬件资源有限、缺乏IMU或深度相机的差速机器人平台。本文聚焦真实部署场景,覆盖RPLIDAR等常见2D激光雷达与TurtleBo

weixin_30596165的博客 357

CodeForces #642 题解

CodeForces #642 D. Constructing the Array【优先队列】 题目 给出一个长为nnn的全0字符串,要进行nnn次操作,第iii次操作规则如下: 在当前字符串中找到一个最长且全为0的子串,如果存在多个,选择最左边的一个; 赋值:s[l+r2]=is[\frac{l+r}{2}]=is[2l+r​]=i 求出nnn次操作后得到的字符串 题解 本题中,用结点node表示一段全为0的子串,包括其左边界、有边界和长度 struct node { int l, r, len;

SHUlpt的博客 342

LPDDR5/5X BG mode,8B mode和16B mode

LPDDR5/5X 器件,协议上支持多个bank架构可静态配置;配置在MR3:模式说明协议要求速率要求BLBG模式每CH 4BG, 4BALPDDR5/5X>3200MbpsBL16 & 328B模式每CH 8BALPDDR5任何速率BL3216B模式每CH 16BALPDDR5/5X<=3200MbpsBL16 & 32。

hemlok的博客 8859

QT5.14.2离线安装包保姆级教程:断网、选组件、避坑全记录

本文详细介绍了QT5.14.2离线安装包的完整流程,特别针对Windows平台开发者提供断网安装、组件选择及避坑指南。作为QT5系列中最后一个免费离线版本,5.14.2具有免注册、全组件离线安装等独特优势,是开源开发者的理想选择。文章涵盖从环境准备到安装后配置的全方位指导,帮助开发者高效完成安装并避免常见问题。

weixin_30924087的博客 578

Codeforces Round #642 (Div. 3) 总结

CodeforcesCodeforcesCodeforces RoundRoundRound #642 (Div.3)\#642\:(Div. 3)#642(Div.3) 总结 这是我在CodeforcesCodeforcesCodeforces上第一次比赛,比的还可以,原因是这是Div.3Div.3Div.3。 我在600600600分里拿了300300300分。 排名分数如下: 第一题:MostMostMost UnstableUnstableUnstable ArrayArrayArray 题目大

linweitong2020的博客 251

复现CVE-2014-085(Apache ZooKeeper 未授权访问漏洞)

默认安装配置完的zookeeper允许未授权访问,管理员未配置访问控制列表(ACL)。导致攻击者可以在默认开放的2181端口下通过执行envi命令获得大量敏感信息(系统名称、java环境)导致任意用户可以在网络不受限的情况下进行未授权访问读取数据。

记录并分享学习安全的知识点.. 2175

Codeforces Round #642 (Div. 3)总结 (D. Constructing the Array)

好久没写过博客了,随便写一篇…… 鉴于这场ABC都是水题就不贴了,就讲一下D题吧 (我才不会说后面的我懒得看了) 因为我写完这篇blog还没结束比赛,所以我刚刚跑去看了最后两题,嗯,不会 原题 题目大意 1、选一段最长并且最左的全为零的连续子串; 2、把该字串中间设为iii。 例子的话看图吧…… ps:该答案存在并唯一 题目分析 这是个模拟题,第一眼看感觉很像快排那种分治思想,所以一开始拿了个队来做,结果发现这样做做不到最左边,之前发现不会STL库太坑了,学了一下优先队列,然后就拿了刚学的优先队列试试手。

juseice的博客 456

微信小程序 - {“errMsg”:”requestPayment:fail banned”} 微信小程序调用wx.requestPayment支付失败返回错误(uniapp微信小程序微信支付报错)

{“errMsg”:”requestPayment:fail banned”},微信小程序调用wx.requestPayment报错requestPayment:fail banned,uni-app微信小程序wx.requestPayment支付报错requestPayment:fail banned,拉起小程序支付报错,iPhone苹果ios真机微信支付报错,Android安卓手机微信支付报错,支付报错,商户配置,签名验证,uniapp 小程序支付微信支付一场,设置过b2b类目,确认了商户号相关功能正常

🏆 前端领域优质创作者 3342

动量因子在A股市场的有效性分析:量化实证研究

验证动量因子在A股市场的有效性及时间周期性分析不同时间窗口(短期/中期/长期)对动量效应的影响量化交易成本、市场流动性对动量策略收益的侵蚀程度比较A股与成熟市场(如美股)动量效应的差异特征理论框架:行为金融学解释动量效应的产生机制技术实现:Python全流程代码实现动量因子计算与回测实证分析:统计检验、风险收益指标、敏感性分析应用拓展:结合市场微观结构的策略优化方案动量因子(Momentum Factor)

2501_92132293的博客 2475

Codeforces Round #642 (Div. 3)D. Constructing the Array(广度优先搜索)

原题链接 题意: 给你一个长度为n的数组a初始元素全为0,每次把含0最多的子序列的中间元素设为当前的操作次数,输出最后不含0的a数组内所有元素。 思路: 一开始看到就感觉和归并排序和快速排序的写法差不多,分区间去弄。就写了以下发现深搜没写出来,没法区分区间内0的个数。既然深搜不行,另一个搜索就是广搜了,普通的队列是不行的,因为这里是先对含0最多并且靠左边的区间操作。那么就用优先队列定义以下优先级就可以了。比赛的时候没写错了很可惜。。 代码: #include<bits/stdc++.h> us.

amazingee的博客 1655

第二章:创建交互式地图

那么您应该已经有了一个安装了这些包的 conda 环境。否则,您需要创建一个新的 conda 环境并使用以下命令安装。

韩天放 4215

Codeforces #642 div3 B

Codeforces 642 div3 B 原题链接 思路:把a顺序排,b逆序排 ACcodes: #include <bits/stdc++.h> using namespace std; const int N = 2e5+10; long long inf = 0x3f3f3f3f3f3f3f3f; int test = 1; int n,k,a[50],b[50]; int main() { scanf("%d",&test); while(test--) { int

Jeremy写字的地方 348

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Codeforces Round #642 (Div. 3)(A-E题解)

这场虽然只写了4题但是打的还是比较舒服的,除了T2粗心WA一发,其他都是一次AC还是比较舒服,开局也不错,20分钟切了两题。 题目大意: 要你构造一个长度为nnn的数组,使得它们的和等于mmm,并且要你最大化∑i=0i=n−1∣a[i]−a[i+1]∣\sum_{i=0}^{i=n-1}|a[i]-a[i+1]|i=0∑i=n−1​∣a[i]−a[i+1]∣ 思路:很显然的一个题。分类讨论一下。 n=1n=1n=1:直接输出0即可。 n=2n=2n=2:输出mmm即可。 n>=3n>=3n&

weixin_43736492的博客 333

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Codeforces Round #642 (Div. 3) A-E详细题解

A. Most Unstable Array     题意:给出n,m。 n表示有n个数,m表示这n个数的总和。每个数都是正整数。 现在你可以随便把m拆成n个数,要保证拆完后的序列,相邻差的绝对值和要最大。 解:      首先特判 n=1 ,答案一定为0,只有一个数嘛。n=2 的时候,2个数,答案要最大,一定是[m,0].这样绝对值差是m,即最大值。 当n>=3时 ,我们可以发现, [0,m,0]这样去构造,答案是2

weixin_43913594的博客 273

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Codeforces Round #642 (Div. 3) B. Two Arrays And Swaps

原题:https://codeforces.com/contest/1353/problem/B 题意:t组案例,n为数组a,b大小,k为可交换次数,求经过k次交换后,数组a的和值的最大值 思路:sort排序,a升序,b降序,从头开始比较k次,a比b大就交换,在求和。 #include <bits/stdc++.h> using namespace std; int t,n,k,a[40],b[40],sum; bool cmp(int a,int b) { return a>b

qq1476318201的博客 217

Codeforces Round #642 (Div. 3)

Codeforces Round #642 (Div. 3) D. Constructing the Array 题意: 一个全零序列,每次操作选择最长靠左的子段[l,r],将a[(l+r)/2]赋值,然后分成2个子段,求最终序列。 题解: 模拟。直接使用优先队列进行模拟。 代码: #include <bits/stdc++.h> using namespace std; typedef long long LL; int const MAXN = 2e5 + 10; int n, m, T

m0_49959202的博客 180

Codeforces Round #642 (Div. 3) 题解

传送门 A. Most Unstable Array 代码: #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<queue> #include<vector> #include<string> using namespace std; const int INF = 0x3f3f3f3f; int.

forOnward的博客 468

codeforces Round #642 div.3 D. Constructing the Array

D. Constructing the Arraytime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given an array aa of length nn consisting of zeros. You perform nn actions with this array: during the ii-th action, the f

Think_kill的博客 528

Codeforces-#642 A-E

codeforces #642 Div3A. Most Unstable ArrayB. Two Arrays And SwapsC. Board MovesD. Constructing the ArrayE. K-periodic Garland A. Most Unstable Array 题意:给你一个n和m,n是数组的大小,m是数组所有元素的和,然后让你自定义数组使得 ∑i=1n−1∣ai−ai+1∣\displaystyle\sum_{i=1}^{n-1} |ai−ai+1|i=1∑n−1​∣a

Evilsong7 的博客 361

Codeforces Round #642 (Div. 3) E. K-periodic Garland 思维

题目连接 题目大意 给你一个01串,要你用最少的变化次数使得所有的1相邻的距离为k。变化的方式为1->0,0->1.要你求最少的变化次数 题目思路 emm完全没啥思路,看了题解,其实就是你要想这些数字1都是modk等于一个定值,那么你就可以用余数开始枚举。 首先肯定时要统计所有1的个数 sum 然后把 ai 中的字符 1 看成数字 1,字符 0 看成数字 −1,问题就变成了求 ai 中最大连续子序列和 (now)sum-now即为最优解。有些难解释,但是自己仔细思考应该就明白了。遇到此类题目就是

hunxuewangzi的博客 642

Codeforces Round #642 (Div. 3)------题目+题解+代码(A、B、C、D)

文章目录A. Most Unstable ArrayB. Two Arrays And SwapsC. Board MovesD. Constructing the Array A. Most Unstable Array 来源:http://codeforces.com/contest/1353/problem/A You are given two integers n and m. You have to construct the array a of length n consisting of

SDAU_LGX的博客 993

Codeforces Round #642 (Div. 3) A-F题解

比赛地址 A.Most Unstable Array 思路:显然 0 m 0 这样放是最大的 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 2e5 + 10; #define fi first #define se second #define pb push_back #define mp make_pair int t,n,m; int main() { ios::syn

pubgoso的博客 306

Codeforces Round #642 (Div. 3) C. Board Moves (思维)

题目链接 题意: 给你一个n*n的方阵,n肯定为奇数。每个方阵上有一个图形,问:最少需要多少步,把所有的图形集中在一个图形上。 //可以斜着走 思路: 肯定是移到方阵中间需要最少的步数。我们可以观察到中间与周围8个组成的33的方阵中,外围的8个图形每一个需要移动一步,然后我们扩大到55的方阵,外围的16个图形每一个需要移动俩步,依次类推 #include <bits/stdc++.h> using namespace std; #define NewNode (TreeNode *)malloc

give it a try 418
上一篇: 东北林业大NEFU 五一欢乐水题 F&H题解
下一篇: 板子库:单调队列实现的一维滑动窗口(模板题)
DevourPower
博客等级 码龄7年 52粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值