梦熊杯-十二月月赛-白银组题解-D.智慧

news2024/10/6 8:34:36

D. Problem D.智慧(wisdom.cpp)

内存限制:256 MiB

时间限制:1000 ms

标准输入输出

题目类型:传统

评测方式:文本比较

题目描述:

「须弥」是「智慧」的国度。

布耶尔认为,如果能只使用加号与减号,连接三个整数 a,b,c,使得到的式子的结果为 n,那么 n 就是一个「智慧数」,反之则不是一个「智慧数」。

现在给你一个整数 n,她希望你判断出 n 是否为「智慧数」。

请注意,a,b,c 三个数的顺序可以调换。

输入格式:

四个整数 a,b,c,n。

输出格式:

一个字符串,若 n 为「智慧数」则输出 YES,反之输出 NO


样例:

【样例 1 输入】

5 7 2 4

【样例 1 输出】

YES

【样例 2 输入】

3 10 2 5

【样例 2 输出】

YES

【样例 3 输入】

8 2 9 4

【样例 3 输出】

NO

【样例 4 输入】

5 3 9 1

【样例 4 输出】

YES

数据范围与提示:

【样例解释 #1】

当a=5 ,b=7,c=2 时,b+c-a=7+2-5=4,所以 4 是一个「智慧数」。

【样例解释 #2】

当 a=3,b=10,c=2 时,b-a-c=10-3-2=5,所以 5 是一个「智慧数」。

【样例解释 #3】

当 a=8,b=2,c=9 时,无法构造出一种情况满足条件,所以 4 不是一个「智慧数」。


 【数据范围】

对于10%  的数据,保证a=n 。

对于 30% 的数据,0<=a,b,c,n<=100。

对于 100% 的数据,0<=a,b,c,b<=1000。

思路:

  1.穷举法

  我们这道题的意思是在a  b  c之间添加加好或者减号,让结果等于n,我们可以怎么添加呢?

  1. a+b+c
  2. a-b+c
  3. a+b-c
  4. a-b-c  

  总共有这四种添加运算符合的办法,但是我们真的只用判断上面四种的结果是不是等于n吗? 

  答案是:假的。

  因为题目有特殊说明,a,b,c可以交换顺序,所以我们还有很多种顺序没有交换,那么我们有哪些交换的方法呢?

  1. a  b  c
  2. a  c  b
  3. b  a  c
  4. b  c  a
  5. c  a  b
  6. c  b  a

  我们总共有这些交换法,那么这六种不同的顺序都可以套入上方运算符的添加,所以总共可以有这些运算式:

  1. a+b+c
  2. a-b+c
  3. a+b-c
  4. a-b-c
  5. a+c+b
  6. a-c+b
  7. a+c-b
  8. a-c-b
  9. b+a+c
  10. b-a+c
  11. b+a-c
  12. b-a-c
  13. b+c+a
  14. b-c+a
  15. b+c-a
  16. b-c-a
  17. c+a+b
  18. c-a+b
  19. c+a-b
  20. c-a-b
  21. c+b+a
  22. c-b+a
  23. c+b-a
  24. c-b-a

  我们只需要判断这些运算式的结果是不是等于n,如果等于n那么就输出YES,如果这些运算式的结果都不等于n,那么就输出NO。(这就是穷举法,找到所有的运算式,并计算出结果)(在代码处我们可以看到,其实这上述24四种运算式有重复的)

  2.函数法

  我们可以对于穷举法进行一次代码长度的优化,怎么优化呢?

  我们知道,运算符所有添加方法是这样:

  1. a+b+c
  2. a-b+c
  3. a+b-c
  4. a-b-c  

  我们可以编写一个函数pd,参数见为a,b,c,n,返回值为bool.作用是依次计算出a,b,c添加运算符所有方法的结果,x1,x2,x3,x4. 然后判断x1,x2,x3,x4有没有一个等于n的,如果有就返回true,没有的话就返回false.

  之后在main主函数中,输入a,b,c,n之后,我们只需要依次判断:

  1. a  b  c
  2. a  c  b
  3. b  a  c
  4. b  c  a
  5. c  a  b
  6. c  b  a

  这六种顺序法代入函数pd后的返回值是不是为真,为真的话就输出YES,如果这六种顺序代入函数pd后返回值都是false的话,就输出NO。

  这样子来做,省略了穷举法部分重复计算的代码部分,效率差不多,但是运用函数代码更加的简洁了!

代码:

  1.穷举法代码

#include<bits/stdc++.h> //万能头文件 
using namespace std; //允许使用std类 
int main(){ //main主函数 
	int a,b,c,n; //定义 
	cin>>a>>b>>c>>n; //输入 
	if(a+b+c==n) //第一种运算式 
	  cout<<"YES"<<endl; //是智慧数 
	else if(a-b+c==n) //第二种运算式
	  cout<<"YES"<<endl; //是智慧数
	else if(a+b-c==n) //第三种运算式
	  cout<<"YES"<<endl; //是智慧数
	else if(a-b-c==n) //第四种运算式 
	  cout<<"YES"<<endl; //是智慧数
	else if(a+c+b==n) //第五种运算式,和第一种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(a-c+b==n) //第六种运算式,和第三种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(a+c-b==n) //第七种运算式,和第二种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(a-c-b==n) //第八种运算式,和第四种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(b+a+c==n) //第九种运算式,和第一种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(b-a+c==n) //第十种运算式 
	  cout<<"YES"<<endl; //是智慧数
	else if(b+a-c==n) //第十一种运算式,和第三种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(b-a-c==n) //第十二种运算式 
	  cout<<"YES"<<endl; //是智慧数
	else if(b+c+a==n) //第十三种运算式,和第一种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(b-c+a==n) //第十四种运算式,和第三种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(b+c-a==n) //第十五种运算式,和第十种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(b-c-a==n) //第十六种运算式,和第十二种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(c+a+b==n) //第十七种运算式,和第一种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(c-a+b==n) //第十八种运算式 
	  cout<<"YES"<<endl; //是智慧数
	else if(c+a-b==n) //第十九种运算式,和第二种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(c-a-b==n) //第二十种运算式 
	  cout<<"YES"<<endl; //是智慧数
	else if(c+b+a==n) //第二十一种运算式,和第一种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(c-b+a==n) //第二十二种运算式,和第二种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(c+b-a==n) //第二十三种运算式,和第十种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else if(c-b-a==n) //第二十四种运算式,和第二十种运算式重复 
	  cout<<"YES"<<endl; //是智慧数
	else //以上条件都不符合 
	  cout<<"NO"<<endl; //不是智慧数
	return 0; //结束 
}

  2.函数法代码

#include<bits/stdc++.h> //万能头文件 
using namespace std; //允许使用std类 
bool pd(int a,int b,int c,int n){ //求出a,b,c中所有搭配运算符的结果是不是有一个等于n 
	int x1=a+b+c,x2=a-b-c,x3=a-b+c,x4=a+b-c; //四种运算符搭配方式 
	if(x1==n||x2==n||x3==n||x4==n) //是不是有一个等于n 
	  return true; //返回为真 
	return false; //返回为假 
}
int main(){ //main主函数 
	int a,b,c,n; //定义 
	cin>>a>>b>>c>>n; //输入 
	if(pd(a,b,c,n)) //第一种顺序法 
	  cout<<"YES"<<endl; //是智慧数 
	else if(pd(a,c,b,n)) //第二种顺序法 
	  cout<<"YES"<<endl; //是智慧数
	else if(pd(b,a,c,n)) //第三种顺序法 
	  cout<<"YES"<<endl; //是智慧数
	else if(pd(b,c,a,n)) //第四种顺序法 
	  cout<<"YES"<<endl; //是智慧数
	else if(pd(c,a,b,n)) //第五种顺序法 
	  cout<<"YES"<<endl; //是智慧数
	else if(pd(c,b,a,n)) //第六种顺序法 
	  cout<<"YES"<<endl; //是智慧数
	else //以上条件都不满足 
	  cout<<"NO"<<endl; //不是智慧数
	return 0; //结束 
}

总结:

  运用了函数的代码长度为27行,没有运用函数的代码长度为57行,多了30行的差距,你说函数有多重要了吧,可以很大程度增加你编代码的速度。但是不要乱用函数,毕竟调用函数要多出O(1)的时间,有些时候如果有重复的语句需要使用(大于1次),就可以写成函数。如果只用一次,还要写成函数的话,就多了O(1)的时间开销,这样时间换速度就亏了,还不如不写函数。

题目链接:

​​​​​​​
登录 - 梦熊联盟icon-default.png?t=MBR7http://mna.wang/contest/50/problem/4

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

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

相关文章

CTFshow--web--红包题第七弹

好家伙&#xff0c;一打开就是个phpinfo&#xff0c;看看了感觉暂时没有什么利用的东西&#xff0c;扫一下目录吧使用dirsearch扫描&#xff0c;发现/.git/index的一个目录文件&#xff0c;访问下载他python dirsearch.py -u "http://98c1d213-ce9d-4415-99b1-2b4f2c80430…

java 探花交友项目day5 推荐好友列表 MongoDB集群 发布动态,查询动态 圈子功能

推荐好友列表 需求分析 推荐好友&#xff1a;分页形式查询推荐的用户列表&#xff0c;根据评分排序显示 代码实现&#xff1a; tanhuaController: /** * 查询分页推荐好友列表 */ GetMapping("/recommendation") public ResponseEntity recommendation(Recomme…

回归模型评价指标原理与基于sklearn的实现

1 前言 回归任务是机器学习中常见的任务&#xff0c;特别是涉及到具体的发电量预测、风力预测等工业任务时&#xff0c;有非常多的应用场景。回归任务不同于分类任务&#xff0c;回归任务的预测值一般是连续的数&#xff0c;分类任务的预测值则是离散的值&#xff08;比如0、1分…

ssh2.js+Shell一套组合拳下来,一年要花2080分钟做的工作竟然节省到52分钟~

前言 进入了新的一年&#xff0c;团队被分配了新的工作内容——每周巡检。 巡检工作简单&#xff0c;但需要人工重复性地登陆远程服务器、输入重复的命令&#xff0c;然后将命令的结果记录下来。每做一次估计花40分钟&#xff0c;但要每周做&#xff0c;一年52周&#xff0c;…

Java---微服务---分布式搜索引擎elasticsearch(3)

分布式搜索引擎elasticsearch&#xff08;3&#xff09;1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现2.自动补全2.1.拼音分…

51单片机学习笔记-15 红外遥控

15 红外遥控 [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 15.1 红外遥控与外部中断 15.1.1 红外遥控器 红外遥控是利用红外光进行通信的设备…

【MyBatis】| MyBatis参数处理(核心知识)

目录 一&#xff1a;MyBatis参数处理 1. 单个简单类型参数 2. Map参数 3. 实体类参数&#xff08;PoJo类&#xff09; 4. 多参数 5. Param注解&#xff08;命名参数&#xff09; 一&#xff1a;MyBatis参数处理 接口中方法的参数专栏&#xff01; 1. 单个简单类型参数 简…

RSA加密算法

RSA算法原理 非对称加密算法&#xff0c;有公钥和私钥之分通过公钥加密的数据必须通过私钥才能解密&#xff0c;反之&#xff0c;私钥加密的数据需要通过公钥解私钥能生成公钥&#xff0c;当公钥不能推导出私钥 欧拉函数 指小于n的正整数中与n互质的数的总个数&#xff08;记…

基于蜣螂算法优化的核极限学习机(KELM)回归预测-附代码

基于蜣螂算法优化的核极限学习机(KELM)回归预测 文章目录基于蜣螂算法优化的核极限学习机(KELM)回归预测1.KELM理论基础2.回归问题数据处理4.基于蜣螂算法优化的KELM5.测试结果6.Matlab代码摘要&#xff1a;本文利用蜣螂算法对核极限学习机(KELM)进行优化&#xff0c;并用于回归…

C 语言零基础入门教程(十九)

C 文件读写 上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。 一个文件&#xff0c;无论它是文本文件还是二进制文件&#xff0c;都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数&#xff0c;也…

激光SLAM闭环方案总结

高质量的闭环是建图必不可少的元素之一。而激光SLAM不像视觉那样可以提供细致的纹理信息&#xff0c;因此常常出现误检和漏检的情况。最近&#xff0c;看了不少关于激光SLAM闭环方法的论文&#xff0c;总结一下。一、构建点云的描述子1、Scan Context&#xff08;2018&#xff…

抗抑郁药如何帮助细菌抵抗抗生素

谷禾健康 迄今为止最全面的全球抗菌素耐药性 (AMR) 研究发现&#xff0c;由耐药菌引起的感染是所有年龄段人群死亡的主要原因之一。 22年发表在《柳叶刀》杂志上的分析估计&#xff0c;2019 年有 495 万人死于细菌性 AMR 发挥作用的疾病。其中&#xff0c;127 万人死亡是 AMR 的…

如何使用matlab对时间序列进行ADF检验?|adftest函数(获取不同显著性下的统计结果)

ADF检验 迪基富勒检验&#xff08;ADF检验&#xff09;是一种常见的统计检验&#xff0c;用于检验给定时间序列是否平稳。在分析序列的平稳性时&#xff0c;它是最常用的统计检验之一。matlab中提供了函数adftest可以完成该检验&#xff0c;本文重点介绍该函数的用法。 Matla…

创建表和管理表

文章目录基础知识一条数据存储的过程标识符命名规则MySQL中的数据类型创建和管理数据库创建数据库使用数据库修改数据库删除数据库创建表创建方式1创建方式2查看数据表结构修改表追加一个列修改一个列重命名一个列删除一个列重命名表删除表清空表内容拓展拓展1&#xff1a;阿里…

setState的使用+React更新机制+events+受控和非受控组件

setState是异步更新 总结&#xff1a; 1.setState设计为异步&#xff0c;可以显著的提升性能 如果每次调用 setState都进行一次更新&#xff0c;那么意味着render函数会被频繁调用&#xff0c;界面重新染&#xff0c;这样效率是很低的&#xff1b;最好的办法应该是获取到多个更…

单片机开发---ESP32S3移植lvgl+触摸屏

书接上文 《单片机开发—ESP32-S3模块上手》 本章内容 熟悉一下ESP32S3的开发&#xff0c;修改范例程序的lvgl&#xff0c;使之能够匹配现在的显示屏。 具体工作大概为通过SPI接口连接一块SPI串口屏幕&#xff0c;并且适配lvgl&#xff0c;最后加上触摸屏作为输入。 屏幕 …

【计算机网络】第一章 计算机网络结构

文章目录第一章 体系结构1.1 计算机网络概述1.1.1 计算机网络的概念1.1.2 计算机网络的组成1.1.3 计算机网络的功能1.1.4 计算机网络的分类*1.1.5 计算机网络的标准化工作1.1.6 计算机网络的性能指标1.2 计算机网络体系结构与参考模型1.2.1 计算机网络分层结构1.2.2 计算机网络…

#8链表的中间结点#

链表的中间结点 1题目链接 链接 2思路 思路1:遍历一遍 计数 然后/2 再遍历一遍 思路2:slow fast指针 slow指针一次走1步 fast指针一次走2步 当fast为空的时候 slow的位置就是中间结点 奇数个: 1 2 3 4 5 fast走完第三次为空 slow走完第三次就是3 偶数个: 1 2 3 4 5 6 fast走完…

智慧型物业管理系统功能解析

随着当前社会经济的发展与科技发达&#xff0c;物业管理系统化已经成为常态了。尤其是随着智慧物业管理系统功能越来越多&#xff0c;人们对智慧物业管理系统的依赖就更明显了。毕竟系统真的可以给生活带来很多的便利之处&#xff1a; 业主可通过该系统查询自己住房的详细信息…

“揾”钱,最紧要系稳

我是腾讯安全的樊自磊。我们团队在腾讯主要负责金融风控产品&#xff0c;解决相关产品交付和服务维护工作&#xff0c;像国内知名大型国有银行、城商行、互联网金融公司等&#xff0c;都是我们的服务对象。今年春节&#xff0c;我和我的的同事们都在深圳为金融行业的网络安全进…