洛谷-P7071 [CSP-J2020] 优秀的拆分

[CSP-J2020] 优秀的拆分

题目描述

一般来说,一个正整数可以拆分成若干个正整数的和。

例如, 1 = 1 1=1 1=1 10 = 1 + 2 + 3 + 4 10=1+2+3+4 10=1+2+3+4 等。对于正整数 n n n 的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下, n n n 被分解为了若干个不同 2 2 2正整数次幂。注意,一个数 x x x 能被表示成 2 2 2 的正整数次幂,当且仅当 x x x 能通过正整数个 2 2 2 相乘在一起得到。

例如, 10 = 8 + 2 = 2 3 + 2 1 10=8+2=2^3+2^1 10=8+2=23+21 是一个优秀的拆分。但是, 7 = 4 + 2 + 1 = 2 2 + 2 1 + 2 0 7=4+2+1=2^2+2^1+2^0 7=4+2+1=22+21+20 就不是一个优秀的拆分,因为 1 1 1 不是 2 2 2 的正整数次幂。

现在,给定正整数 n n n,你需要判断这个数的所有拆分中,是否存在优秀的拆分。若存在,请你给出具体的拆分方案。

输入格式

输入只有一行,一个整数 n n n,代表需要判断的数。

输出格式

如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出这个拆分中的每一个数,相邻两个数之间用一个空格隔开。可以证明,在规定了拆分数字的顺序后,该拆分方案是唯一的。

若不存在优秀的拆分,输出 -1

样例 #1

样例输入 #1

6

样例输出 #1

4 2

样例 #2

样例输入 #2

7

样例输出 #2

-1

提示

样例 1 解释

6 = 4 + 2 = 2 2 + 2 1 6=4+2=2^2+2^1 6=4+2=22+21 是一个优秀的拆分。注意, 6 = 2 + 2 + 2 6=2+2+2 6=2+2+2 不是一个优秀的拆分,因为拆分成的 3 3 3 个数不满足每个数互不相同。


数据规模与约定

  • 对于 20 % 20\% 20% 的数据, n ≤ 10 n \le 10 n10
  • 对于另外 20 % 20\% 20% 的数据,保证 n n n 为奇数。
  • 对于另外 20 % 20\% 20% 的数据,保证 n n n 2 2 2 的正整数次幂。
  • 对于 80 % 80\% 80% 的数据, n ≤ 1024 n \le 1024 n1024
  • 对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 10 7 1 \le n \le {10}^7 1n107

简化题目

就是给定N,让你把他拆成不同的2的几次方,注意0不算
如果可以输出,不行-1

解析

主要的思路就是从大到小,因为可以看出,这道题拆分的数据只可以是2的次方,所以拆数必须从大到小,因为自己研究可以得出,从小到大会出现不够的情况,因为每次懂会是之前的二倍,之前的是1/2,之后是1/4
(这段话可能有点难懂,主要是从大到小的思路)

第一步:确定范围

首先要确定最大的次方是多少,可以直接写一个while循环

while(pow(2,max)<=n){max++;}//确定最高值

但是也可以不用1 点一下1

第二部 暴力枚举家模拟

很简单,一步步往下减就可以了

for(int i=max;i>=1;i--){if(pow(2,i)<=b){powe[cnt]=i;b-=pow(2,i);//一下下往下减cnt++;}}

最后记得储存数据

第三 输出

这里一定要注意加一个(int),因为pow函数返回的是float,会自动转换为E计数法,导致不通过

for(int i=0;i<cnt;i++){cout<<(int)pow(2,powe[i])<<' ';//还原成答案, '   '输出}

AC代码

#include <bits/stdc++.h>using namespace std;
int n;
int powe[1000];
int cnt;
int main()
{cin>>n;if(n%2!=0){cout<<"-1";return 0;}int b=n;int max=1;while(pow(2,max)<=n){max++;}//确定最高值//bool flag;for(int i=max;i>=1;i--){if(pow(2,i)<=b){powe[cnt]=i;b-=pow(2,i);//一下下往下减cnt++;}}if(b==0){for(int i=0;i<cnt;i++){cout<<(int)pow(2,powe[i])<<' ';//还原成答案, '   '输出}}else cout<<"-1";return 0;
}

谢谢大家


  1. 这里的偷懒指的是不用while循环,直接写成在第二步里的i初始值是n/2,本体亲测通过,这样可以省去while循环的时间,但是有可能浪费了i循环的时间,所以严谨一些,建议使用while确定范围。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工厂方法模式和抽象工厂

工厂方法模式的核心思想就是为每种产品定义一个创建工厂方法的工厂类&#xff0c;核心就是面向接口编程 成员包含&#xff1a; &#xff08;1&#xff09;产品接口&#xff0c;工厂接口 &#xff08;2&#xff09;产品实现类&#xff0c;工厂实现类 产品接口和具体产品类 // …

xss+csrf项目实例

项目背景&#xff1a; 如下&#xff1a;我们是在一个类似文章管理系统的网站上面发现的该漏洞。我们将其运行在本地的phpstudy集成环境上面。 源码地址下载链接&#xff1a;https://pan.baidu.com/s/1MpnSAq7a_oOcGh4XgPE-2w 提取码&#xff1a;4444 考察内容&#xff1a; …

分布式锁的几种形式以及优缺点

在分布式系统中,分布式锁是一种用于控制对共享资源访问的机制,以确保多进程、多线程环境下的数据一致性。分布式锁有多种实现方式,本文将介绍几种常见的分布式锁及其优缺点。 一、基于数据库的分布式锁 实现方式 表锁:使用数据库提供的锁机制,例如 MySQL 的 SELECT ... …

【JavaScript脚本宇宙】提升Markdown工作流:不可错过的六个JavaScript库

优化你的Markdown体验&#xff1a;六大JavaScript库一网打尽 前言 在现代Web开发中&#xff0c;Markdown作为一种轻量级的标记语言&#xff0c;凭借其简洁易读的语法和广泛的适用性&#xff0c;迅速成为开发者们的宠儿。为了更有效地解析和处理Markdown内容&#xff0c;JavaS…

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…

中断里用信号量而不用消息队列

在嵌入式开发中&#xff0c;中断处理程序&#xff08;ISR&#xff09;是一个非常重要的部分。ISR需要非常高效地运行&#xff0c;以确保系统能够及时响应硬件事件。使用信号量和消息队列都是常见的同步机制&#xff0c;但它们在中断上下文中的使用有不同的限制和建议。 信号量…

嵌入式复古游戏项目开发与实现

大家好,今天看到一个火柴盒项目,非常的小巧,分享给大家,感兴趣的话,可以复刻一个玩一玩。 MicroByte 是一款微型主机,能够运行 NES、GameBoy、GameBoy Color、Game Gear 和 Sega Master 系统的游戏,所有元器件都设计在这 78 x 17 x 40 mm 的封装中。尽管成品尺寸很小,但…

AI预测体彩排3采取888=3策略+和值012路或胆码测试6月16日升级新模型预测第1弹

根据前面的预测效果&#xff0c;我对模型进行了重新优化&#xff0c;因为前面的模型效果不是很好。熟悉我的彩友比较清楚&#xff0c;我之前的主要精力是对福彩3D进行各种模型的开发和预测&#xff0c;排三的预测也就是最近1个月才开始搞的。3D的预测&#xff0c;经过对模型的多…

Java面向对象-接口

Java面向对象-接口 一、JDK1.8之前二、接口的作用三、JDK1.8之后&#xff0c;新增非抽象方法四、静态方法 一、JDK1.8之前 1、类是类&#xff0c;接口是接口&#xff0c;它们是同一层次的概念 2、接口中没有构造器 3、接口如何声明&#xff1a;interface 4、在jdk1.8之前&…

002 IOC和DI使用

文章目录 基于XML的使用IOC配置第三种:实例工厂(了解)DI配置构造函数注入set方法注入(重点)使用p名称空间注入数据依赖注入不同类型的属性 基于注解和XML混合方式的使用IoC注解使用方法IoC注解(创建对象)DI注解(依赖注入)关于注解和XML的选择问题 基于纯注解方式使用注解和XML混…

【字符串函数】

1.strlen的使⽤和模拟实现 size_t strlen ( const char * str ); 1.字符串以 \0 作为结束标志&#xff0c;strlen函数返回的是在字符串中 \0 前⾯出现的字符个数&#xff08;不包 含 \0 )。 2.参数指向的字符串必须要以 \0 结束。 3.注意函数的返回值为size_t&#xff0c;是⽆…

代码随想录算法训练营刷题复习3:动态规划——子序列问题

子序列问题 包含四个子问题&#xff1a;子序列&#xff08;不连续&#xff09;、子序列&#xff08;连续&#xff09;、编辑距离、回文 子序列&#xff08;不连续&#xff09; 300.最长递增子序列 定义dp数组&#xff0c;问什么dp的定义就设什么&#xff0c; 更新dp[i]的值&…

力扣148. 排序链表

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示例 3&…

23 华三(自动获取的IP地址)

华三交换机 DHCP 配置 #version 7.1.070, Alpha 7170 //设备的版本信息 #sysname sw1 //修改设备的名字 #irf mac-address persistent timerirf auto-update enableundo irf link-delayirf member 1 priority 1#dhcp enable //开启DHCP 服务dhcp server forbidden-ip 192.168.…

.net 调用海康SDK的常用操作封装

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不仅…

2024/6/16周报

文章目录 摘要Abstract文献阅读题目问题本文贡献方法aGNN输入和输出模块嵌入模块编码器和解码器模块&#xff1a;支持多头注意的GCN多头自注意力机制GCN模型解释&#xff1a;SHAP 案例研究地下水流动与污染物运移模型研究场景设计 数据集实验结果 代码复现结论 摘要 本周阅读了…

whisper 模型源码解读

whisper官方源码 whisper 模型官方代码&#xff1a;https://github.com/openai/whisper/blob/main/whisper/model.py &#xff1b;注释如下 import base64 import gzip from dataclasses import dataclass from typing import Dict, Iterable, Optionalimport numpy as np impo…

java设计模式和面向对象编程思想

Java设计模式和面向对象编程思想是软件开发中的核心概念&#xff0c;对于构建可维护、可扩展的软件系统至关重要。下面是对这两个主题的知识点总结&#xff1a; 面向对象编程&#xff08;OOP&#xff09;思想 封装&#xff1a;将数据&#xff08;属性&#xff09;和操作这些数据…

享元和代理模式

文章目录 享元模式1.引出享元模式1.展示网站项目需求2.传统方案解决3.问题分析 2.享元模式1.基本介绍2.原理类图3.外部状态和内部状态4.类图5.代码实现1.AbsWebSite.java 抽象的网站2.ConcreteWebSite.java 具体的网站&#xff0c;type属性是内部状态3.WebSiteFactory.java 网站…

CSS从入门到精通——动画:CSS3动画执行次数和逆向播放

目录 任务描述 相关知识 动画执行次数 动画反向播放 编程要求 任务描述 本关任务&#xff1a;用 CSS3 实现loading效果。效果图如下&#xff1a; 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.动画执行次数&#xff0c;2.动画反向播放。 需要实现的效…