codeforces 962 D. Merge Equals

基于C#的机器人控制框架:如何将ROS与硬件集成 本文探讨了如何利用C#与ROS(Robot Operating System)集成开发机器人控制系统。通过ROSSharp库和rosbridge中间件,实现了C#与ROS的WebSocket通信,并展示了硬件控制模块的设计方法。文章详细介绍了电机控制的串口通信实现、ROS消息订阅机制,以及性能优化和容错处理策略,最终构建了一个智能小车控制框架的案例。这种C#与ROS的集成方案为机器人开发提供了跨平台支持,同时兼顾了系统的高效性和可靠性。 阅读详情

Description

You are given an array of positive integers. While there are at least two equal elements, we will perform the following operation. We choose the smallest value x that occurs in the array 2 or more times. Take the first two occurrences of x in this array (the two leftmost occurrences). Remove the left of these two occurrences, and the right one is replaced by the sum of this two values (that is, 2⋅x).

Determine how the array will look after described operations are performed.

For example, consider the given array looks like [3,4,1,2,2,1,1]
. It will be changed in the following way: [3,4,1,2,2,1,1] → [3,4,2,2,2,1] → [3,4,4,2,1] → [3,8,2,1].

If the given array is look like [1,1,3,1,1] it will be changed in the following way: [1,1,3,1,1] → [2,3,1,1] → [2,3,2] → [3,4].

Input

The first line contains a single integer n (2≤n≤150000) — the number of elements in the array.

The second line contains a sequence from n elements a1,a2,…,an (1≤ai≤109) — the elements of the array.

Output

In the first line print an integer k — the number of elements in the array after all the performed operations. In the second line print k integers — the elements of the array after all the performed operations.

Examples

Input
7
3 4 1 2 2 1 1
Output
4
3 8 2 1

Input
5
1 1 3 1 1
Output
2
3 4

Input
5
10 40 20 50 30
Output
5
10 40 20 50 30

Note

The first two examples were considered in the statement. In the third example all integers in the given array are distinct, so it will not change.


题意:每次选两个相同的数,它们是所有数中最小的而且是最左边的,把它们去掉并在原来第二个数的位置放上两数值的和(也就是原来的两倍),这样的操作能做几次?
分析:表面一看就是模拟题嘛,但是问题在与怎么高效做到在反复插入和删除的过程中,能迅速找到要删除的两个数,适合这种情况的数据结构就是优先队列啦。

  • 定义
template < 
   class Type,  
   class Container=vector<Type>, 
   class Compare=less<typename Container::value_type>  
> 
class priority_queue
  • 含义

    • Type
      • The element data type to be stored in the priority_queue.
    • Container
      • The type of the underlying container used to implement the priority_queue.
    • Compare
      • The type that provides a function object that can compare two element values as sort keys to determine their relative order in the priority_queue. This argument is optional and the binary predicate less < typename Container ::value_type > is the default value.
  • 简单来说就是:第一个参数表示要存放的数据类型,第二个参数表示底层用那种容器来存放数据,第三个参数表示排序是升序还是降序的。

当向优先队列插入一个元素时,会被自动整理到有序的位置,我们可以利用这个性质,始终保证在队列前面是最小的两个数,这样每次只需要把这两个数取出来,×2,再放回去就行了。

思路:建立<unsigned long long, int>型的数据类型,分别保存数值和所在位置,这样执行push后,优先队列将自动按数值和所在位置进行排序,我们只需要检查队列的前两个数是否相同:如果相同就取出×2再放回去;如果不同,由于它是最小的数,那么一定没有数和它配对,直接把它取出来放到输出中。直到队列为空就结束。

代码:

#include<stdio.h>
#include<queue>
#include<vector>
#include<functional>
#include <algorithm>
using std::priority_queue;
using std::vector;
using std::greater;
using std::pair;
using std::sort;
typedef unsigned long long ll;
typedef pair<ll, int> P;

priority_queue<P,vector<P>,greater<P>> AC;
vector<P> opt;
bool cmp(P p1, P p2) {
    return p1.second < p2.second;
}
int main(){
    int n;
    ll a1;
    P next,temp;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        scanf("%I64d", &a1);
        //以数值和位置构造一个P()插入优先队列
        AC.push(P(a1, i));
    }
    while (!AC.empty())
    {
        next = AC.top(); AC.pop();
        if ((!AC.empty())) {
            temp = AC.top();
            if (next.first == temp.first) {//有两个相同的数
                AC.pop();
                temp.first *= 2;
                AC.push(temp);
                continue;
            }
        }
     opt.emplace_back(next);//队列只剩一个,或者没有数与它配对,都放到输出里面
    }
    //根据位置整理输出顺序
    sort(opt.begin(), opt.end(), cmp);
    //遍历vector输出
    vector<P>::iterator iter = opt.begin();
    printf("%d\n", opt.size());
    for (; iter != opt.end(); iter++) {
        printf("%I64d ", iter->first);
    }
    printf("\n");
}

总结:
STL真好用,就是要敲各种using std::***

YOLOv8有效涨点,增强型 YOLOV8 与多尺度注意力机制特征融合,附代码,详细步骤 在本实验中,我们通过将双层路由注意(BRA)、广义特征金字塔网络(GFPN)和第四检测头结合到YOLOv8中,开发了一种新颖的BGF-YOLO架构。BGF-YOLO 包含注意力机制,可以更多地关注重要特征,特征金字塔网络可以通过将高级语义特征与空间细节合并来丰富特征表示。此外,我们研究了不同的注意力机制和特征融合、检测头架构对检测准确性的影响。实验结果表明,与YOLOv8x相比,BGF-YOLO的mAP50增加了4.7%。 阅读详情

相关推荐

GPU运维面试题

【代码】GPU运维面试题。

u011220233的博客 696

CF D. Merge Equals

time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given an array of positive integers. While there are at least two equal el...

cgtllp1的博客 340

Armbian 国内源一键配置:告别卡顿,加速软件更新

本文详细介绍了如何为Armbian系统配置国内软件源,以解决默认国外源导致的更新缓慢、连接超时等问题。通过手动修改配置文件或使用高效的一键换源脚本,可将源切换至清华大学、阿里云等国内镜像站,实现apt更新与软件安装速度的质的飞跃,让Armbian开发体验更加流畅高效。

weixin_29215815的博客 243

Codeforces 962D Merge Equals

You are given an array of positive integers. While there are at least two equal elements, we will perform the following operation. We choose the smallest value x that occurs in the array 2 or more tim...

包子不卖包子 1092

5nm制程的CV5芯片实测:用它给无人机做8K拍摄和实时避障,功耗和性能到底怎么样?

本文深度评测了5nm制程的CV5芯片在无人机8K拍摄和实时避障中的表现。通过实测数据展示了CV5的异构计算架构、8K视频编码性能和CVflow®AI引擎的加速效果,同时提供了开发中的优化技巧和散热建议,为无人机开发者提供了实用的参考。

weixin_30861797的博客 358

Power Automate 最常用的十大场景以及解决方案

3.2 获取指定主题含有附件邮件,然后读取csv附件内容,插入数据库,调度执行存储过程,最后通过Power automate 发送paginated report 特殊格式报表给发件人。Power Automate 作为微软推出的自动化工作流工具,其适用场景非常广泛,尤其在数据库查询自动化方面能显著提升效率。2.8发送邮件,把生成csv文件当作附件,把生成html当作邮件内容在邮件boty展示。3.1 读取数据库数据,定时发送预警邮件并抄送附件和展示内容在邮件中。:已有微软产品栈,需快速实现部门级自动化。

qq_24388807的博客 3688

ACM刷题之codeforces————Merge Equals

Merge Equalstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given an array of positive integers. While there are at least two equal elemen...

小时的枫的博客 632

Multisim实战:从零搭建体温检测报警电路(附完整仿真文件+调试技巧)

本文详细介绍了如何使用Multisim从零搭建体温检测报警电路,涵盖LM35温度传感器、LM358运算放大器等核心器件的选型与连接,以及信号调理、阈值比较和数码管显示等关键电路设计。附赠完整仿真文件和实用调试技巧,帮助电子工程初学者快速掌握体温温度检测系统的设计与实现。

weixin_28285943的博客 292

Merge Equals CodeForces - 962D(优先队列)

CF真是锻炼STl用法的好地方 http://codeforces.com/problemset/problem/962/D D. Merge Equals time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output You are ...

jiotenno的博客 407

从赛题到实战:一份面向高职“区块链技术应用”赛项的食品溯源系统全栈部署与运维指南

本文为高职院校学生备战“区块链技术应用”技能大赛提供了一份详实的食品溯源系统全栈部署与运维指南。内容涵盖从理解赛题业务逻辑、绘制技术蓝图,到搭建4节点FISCO BCOS联盟链、部署管理平台与智能合约,再到核心运维技能与前后端联调测试的完整流程,旨在帮助参赛者将赛题转化为可运行的实战项目,全面提升区块链全栈开发与运维能力。

weixin_29172201的博客 670

Vue2 - 最新详细实现接入天地图详细配置流程及示例代码教程,提供获取用户当前定位的城市名称及省市区数据、精准经纬度信息、IP属地定位、地图搜索标点等示例,解决天地图跨域报错/页面白屏/定位不准问题

vue2,nuxt2,天地图,使用教程,vue接入国家天地图,定位api,ip属地定位,获取用户当前位置数据,省市区,地图不显示,白屏,报错,vue2如何使用天地图,地图选点,cors跨域,白名单设置了还是不行,vue项目调用天地图api实现定位,Vue2中使用天地图,详细教程,天地图申请密钥key教程,经纬度,经纬度不准确,一直定位北京,定位在北京不准怎么办,nuxt项目天地图,网站,网页,h5页面,地图显示不全,获取当前定位,如何使用天地图,拿到客户ip地址定位城市名称,距离计算,实时搜索地址逆解析,天

🏆 前端领域优质创作者 5326

Educational Codeforces Round 42 (Rated for Div. 2) D. Merge Equals (problems 962D) 几种不同的解题思路

D. Merge Equals 题目传送门 题目大意就是给一个数组,每次合并左边最小的两个数(左边的合并到右边去),一直合并到无法合并为止 目录: D. Merge Equals 一 最low的实现(我的) 二 上述方案的优化版本(来自XTTT) 三 因式分解方式实现(来自dadi) 四 一致认为的最优解(来自小笼包学弟) 前几天与以前的ACM的队友们聊天,突然感触良深...

codeJxwww's blog 716

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1658

codeforces 962 D. Merge Equals

D. Merge Equals time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given an array of positive integers. While there are a...

bjfu170203101的博客 231

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Codeforces 962D - Merge Equals

链接: http://codeforces.com/problemset/problem/962/D 题意: 给出一个整数序列。选择其中最小且出现两次(或以上)的数,把最左边的两个从序列中移除,然后把它们的和放到它们的后面第一位。不断重复上述过程,直到序列中的每个数都是唯一的。输出最后的序列。 分析: 如果在数a的前面有一个可以跟a合并的数b,则b一定是唯一的。否则,b要先跟...

weixin_30394333的博客 117

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

codeforces 962D Merge Equals

题目链接:http://codeforces.com/contest/962/problem/D 题意:输入n,接下来输入n个数ai。每次从左往右,如果某个数字出现次数>=2,记出现次数>=2中最小的数为x,把前面那个x消除,后面的x变成2x。然后一直执行这个操作,直到无法执行,输出最后保留下来的数字,顺序和操作中的不变。 分析:一看到每次消掉最小的x,然后把下标大的x变成2x,就...

weixin_34336292的博客 139

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Codeforces 962D Merge Equals ( 模拟 )

题意 : 给出一个序列,然后每次将重复出现的元素进行求和合并(若有多个,则优先取最小的进行合并),若某重复元素有很多,那么取最左边的那两个进行合并且合并后元素位于原来右边元素的位置,例如 3 2 6 2 2 这里 2 是重复元素,取最左边的两个 2 进行一次求和合并,合并后将变成 4 ,且这个 4 的位置位于较右边的 2 的位置,即序列变成 3 6 4 2。进行这样的操作,直到没有元素重...

177

Codeforces 962D Merge Equals(贪心)

题目链接:Merge Equals 题意 给定一个长度为 nnn 的序列,多次扫描这个序列,每次扫描如果找到出现至少两次的数字中值最小的数字,将最左边的数字合并到右边的那个数字中,并将右边的数字用这个数字的两倍代替,如对于序列 [3,4,1,2,2,1,1][3,4,1,2,2,1,1][3,4,1,2,2,1,1],操作步骤如下: [3,4,1,2,2,1,1]→[3,4,2,2...

Dmaxiya 318

[map|priority_q] Merge Equals CodeForces - 962D

http://codeforces.com/problemset/problem/962/D 维护一个数列 不出现重复数字 如果出现把valx2 放到重复出现位置 安输入顺序 7 3 4 1 2 2 1 1 4 3 8 2 1 按样例理解 [3,4,1,2,2,1,1] [3,4,1,2,2,1,1] → [3,4,2,2,2,1] → [3,4,4,2,1] → [3,8,2...

蒟蒻的最后的倔强 441

Codeforces962D Merge Equals(优先队列)

You are given an array of positive integers. While there are at least two equal elements, we will perform the following operation. We choose the smallest value ???? that occurs in the array 2 or more times. Take the first two occurrences of ???? in this ar

tomjobs的博客 412

Codeforces 962D Merge Equals (结构体+优先队列)

题目链接 题意:给你一个n表示n个数a[n],这是一个集合群,集合可能含有2个或以上的相同数,我们需要不断对集合从左到右进行操作:对于2个相同的数,将第一个出现的加到第二个上(不一定要相邻,第一个数去掉),问你无限次操作后该集合剩几个数,分别输出它们。 解法:(第一次看到就想到使用优先队列不递减的顺序进行判断与合并可以得到最终题目要的目标集合个数和元素,可是一时间脑残没想到怎么标记下标进行移动...

Fushicho_XF的博客 318

Codeforces-962D-Merge Equals (模拟+stl)

D. Merge Equalstime limit per test:2 secondsmemory limit per test:256 megabytesinput:standard inputoutput:standard outputYou are given an array of positive integers. While there are at least two equal...

wust_cyh 355

codeforces 962D. Merge Equals(STL)

                                                                                                D. Merge Equals time limit per test 2 seconds memory limit per test 256 megabytes input standard i...

Amove 328
上一篇: codeforces 962 C. Make a Square
下一篇: nowcoder 115 H 小P的数学问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值