P1043 [NOIP2003 普及组] 数字游戏

news2024/11/15 9:45:52

题目描述

丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共 �n 个),你要按顺序将其分为 �m 个部分,各部分内的数字相加,相加所得的 �m 个结果对 1010 取模后再相乘,最终得到一个数 �k。游戏的要求是使你所得的 �k 最大或者最小。

例如,对于下面这圈数字(�=4n=4,�=2m=2):

要求最小值时,((2−1) mod 10)×((4+3) mod 10)=1×7=7((2−1)mod10)×((4+3)mod10)=1×7=7,要求最大值时,为 ((2+4+3) mod 10)×(−1 mod 10)=9×9=81((2+4+3)mod10)×(−1mod10)=9×9=81。特别值得注意的是,无论是负数还是正数,对 1010 取模的结果均为非负值。

丁丁请你编写程序帮他赢得这个游戏。

输入格式

输入文件第一行有两个整数,�n (1≤�≤501≤n≤50) 和 �m (1≤�≤91≤m≤9)。以下 �n 行每行有个整数,其绝对值 ≤104≤104,按顺序给出圈中的数字,首尾相接。

输出格式

输出文件有 22 行,各包含 11 个非负整数。第 11 行是你程序得到的最小值,第 22 行是最大值。

输入输出样例

输入 #1复制

4 2
4
3
-1
2

输出 #1复制

7
81

说明/提示

【题目来源】

NOIP 2003 普及组第二题

普及组第二题竟然是绿题,蒟蒻的我瑟瑟发抖

思路

该死的DP太难打了,于是我选择直接暴力枚举DFS。

主函数

首先,为了枚举环的起点,需要破环为链,开一个2倍空间的数组记录。

枚举起点时,先dfs,再把整个数组往前挪一位,这样就不用管开始位置的问题了。

最后输出答案。

求模10的余数

这个函数有一个细节:如果原数为负数,则%10之后还是负数。(如(-11)%10=-1)

解决方法:先%10(保证不会小于-10),再+10(变成正数),最后%10(正数+10>10)。

DFS

1.参数:depth深度;now当前位置;value当前的积

2.结束条件:depth==m

3.满足结束条件时:{

1)算出剩余数的和,并与value相乘

2)与两个答案作比较

}

4.下一步深搜:{

1)从now遍历到n-m+depth(再往后就取不到了)

2)用变量sum记录a数组从now开始的前缀和(就是从a[now]一直加到a[i]的和)

3)进行下一步深搜,注意now是i+1

}

5.(最重要的)剪枝:当value>=最小答案且value*9�−����ℎ+19m−depth+1<=最大答案时,就可以剪枝。如果不剪枝,第4个测试点就需要约1000秒的时间(本人亲身经历)

代码

我相信没几个人会喜欢上面的一通分析的吧,那么,你们喜欢的代码来了——

#include<cstdio>
#include<algorithm>//算法库,有max和min
using namespace std;
const int MAXN=110;
const int INF=0x3f3f3f3f;//定义成2e9或2147483647也行
const int n9[9]={9,81,729,6561,59409,531441,4782969,43046721,387420489};//m<=9,打个表就好了
int n,m;
int a[MAXN];
int ansmin=INF,ansmax=0;//最小和最大,都要初始化
int mod10(int x){//计算模10的函数
	return (x%10+10)%10;
}
void dfs(int depth,int now,int value){//重磅dfs
	if(value>=ansmin&&value*n9[m-depth]<=ansmax) return;//剪枝
	int sum=0;
	if(depth==m){
		for(int i=now;i<=n;i++) sum+=a[i];//计算和
		ansmin=min(ansmin,value*mod10(sum));//比较
		ansmax=max(ansmax,value*mod10(sum));
		return;
	}
	for(int i=now;i<=(n-m+depth);i++){//遍历下一个点
		sum+=a[i];//前缀和
		dfs(depth+1,i+1,value*mod10(sum));//下一步计算
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		a[i+n]=a[i];//破环成链
	}
	for(int i=1;i<=n;i++){//枚举初始点
		dfs(1,1,1);//都是1,只是巧合
		for(int j=1;j<=2*n;j++) a[j]=a[j+1];//往前挪
	}
	printf("%d\n%d\n",ansmin,ansmax);//输出
	return 0;//华丽结束
}

不要复制完代码就走了啊,这样是不道德的,思路也是要看的,对了,别忘了要点个赞!

 

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

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

相关文章

Java List、Set、Map区别

概述 集合类存放于java.util包中。集合类存放的都是对象的引用&#xff0c;而非对象本身。常见的集合主要有三种——Set(集&#xff09;、List&#xff08;列表&#xff09;和Map&#xff08;映射&#xff09;。List和Set 都实现了 Collection 接口&#xff0c;并且List和Set也…

php执行语句在MySQL批量插入大数据量的解决方案及计算程序执行时间(大数据量、MySQL语句优化)

MySQL里批量插入大数据的解决方案 前言一、PHP计算程序执行时间二、Mysql批量插入数据1.INSERT INTO 语句2.批量插入大数据2.1 使用循环$sql的方式2.2 循环(值1, 值2,....)的语句2.3测试过程出现的错误 前言 近期在MySQL报表开发过程中&#xff0c;需要爬取多API返回JSON数据&…

MySql中执行计划如何来的——Optimizer Trace | 京东云技术团队

作者&#xff1a;京东物流 籍磊 1.前言 当谈到MySQL的执行计划时&#xff0c;会有很多同学想&#xff1a;“我就觉得使用其他的执行方案比EXPLAIN语句输出的方案强&#xff0c;凭什么优化器做的决定与我得不一样&#xff1f;”。这个问题在MySQL 5.6之前或许自己很难解决&…

真题详解(磁盘)-软件设计(五十八)

真题详解&#xff08;MTTR&#xff09;-软件设计&#xff08;五十七)https://blog.csdn.net/ke1ying/article/details/130354940 1、2021年上半年 解析&#xff1a; 哈希地址 0 1 2 3 4 5 6 7 8 9 10 构建哈希表 第一步&#xff1a;3%11 3 &#xff0c;放在哈希地址3的位置…

如何申请gpt4.0-如何接入ChatGPT4

如何接入ChatGPT4 ChatGPT-4是OpenAI公司推出的最新自然语言处理技术&#xff0c;采用深度学习算法&#xff0c;旨在提供更加高效、准确的人工智能语言处理能力。如果您想要接入ChatGPT-4&#xff0c;您可以按照以下步骤&#xff1a; 注册OpenAI账号并申请API密钥&#xff1a;…

2022年NOC大赛创客智慧编程赛道Python初赛题,包含答案

目录 一、单选题 二、多选题 三、判断题 下载文档打印做题: NOC Python 初赛考题 一、单选题 <

【c语言】typedef的基本用法 | 定义格式

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

【图像分割】【深度学习】SAM官方Pytorch代码-Image encoder模块Vision Transformer网络解析

【图像分割】【深度学习】SAM官方Pytorch代码-Image encoder模块Vision Transformer网络解析 Segment Anything&#xff1a;建立了迄今为止最大的分割数据集&#xff0c;在1100万张图像上有超过1亿个掩码&#xff0c;模型的设计和训练是灵活的&#xff0c;其重要的特点是Zero-s…

从Domino目录导出你想要的信息

大家好&#xff0c;才是真的好。 无论出于什么原因&#xff0c;很多时候&#xff0c;我们要从Domino目录&#xff08;names.nsf&#xff09;中导出人员、群组或Domino相关的配置信息。不过更多时候&#xff0c;还没开始导&#xff0c;很多人就说Domino封闭&#xff0c;不让导出…

由浅入深MFC学习摘记--第四部分下

目录 第十三章 多文件与多显示MDI 和 SDI动态拆分窗口静态拆分窗口拆分 拆分窗口示例同源子窗口CMDIFrameWnd::OnWindowNew范例程序 多文件 第十四章 MFC 多线程从操作系统层面看执行线程线程优先级从程序设计层面看执行线程MFC 多线程程序设计工作线程UI线程执行线程的结束线程…

CASAIM 自动化3d测量系统检测压缩机壳体尺寸偏差/装配验证

压缩机是一种将低压气体提升为高压气体的从动的流体机械&#xff0c;是制冷系统的心脏。 压缩机的壳体共有三部份组成&#xff1a;排气壳体&#xff08;主要是组成压缩机排气通道及接口&#xff09;&#xff0c;机体壳体&#xff08;主要是组成压缩机的涡盘、涡盘支承座、电机…

Bladex后端实现登入时间过期后自动跳转登入页

Bladex后端实现登入时间过期后自动跳转登入页 背景现状期待成果解决方法一找到鉴权配置页面重写拦截器addInterceptors创建CustomMiddleware编制拦截逻辑修改登入有效时常 背景现状 Bladex可手动设置过期时间&#xff0c;但是我使用的是springboot BladeX 2.8.1.RELEASE版本&am…

游戏测试的面试技巧

游戏测试的面试技巧 1.自我介绍 回答提示&#xff1a;一般人回答这个问题过于平常&#xff0c;只说姓名、年龄、爱好、工作经验 &#xff0c;这些在简历上都有&#xff0c;其实&#xff0c;企业最希望知道的是求职者能否胜任工作&#xff0c;包括&#xff1a;最强的技能、最深入…

docker镜像创建|实战案例(ssh|systemd|nginx|apache|tomcat)

docker镜像创建|实战案例&#xff08;ssh|systemd|nginx|apache|tomcat&#xff09; 一 Docker 镜像的创建1.基于现有镜像创建2基于本地模板创建3 基于Dockerfile 创建为什么Docker里的centos的大小才200M&#xff1f;DockerfileDocker 镜像结构的分层 4 Dockerfile 案例&#…

宝光股份 | 打造营销管理数据平台,实现营销管理和业务双提升

陕西宝光真空电器股份有限公司&#xff08;以下简称“宝光股份”&#xff09;&#xff0c;注册资本3.3亿元&#xff0c;于2002年1月在上海证券交易所上市&#xff08;股票代码&#xff1a;600379&#xff09;。 宝光股份已发展成为享誉国内外的真空灭弧室产销基地&#xff0c;…

Python每日一练(20230426)

目录 1. 删除重复字符 ※ 2. 颜色分类 &#x1f31f;&#x1f31f; 3. 计算圆周率 ※ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 删除重复字符 原标题&#xff1a; 输出不重复…

mysql数据库SQL语句orderBy排序同时limit分页出现数据重复问题

先说解决方案&#xff1a;排序中使用唯一值&#xff08;例如主键id&#xff09;&#xff0c;保证每条数据不重复 SELECT * FROM table WHERE 1 1 ORDER BY create_time,id DESC LIMIT 0, 10;1、问题 MySQL官方描述&#xff1a; 如果多行在列中具有相同的值ORDER BY&#xff…

更加适合python小白的object类的特殊方法~

人生苦短&#xff0c; 我用python python 安装包资料:点击此处跳转文末名片获取 一、object类的源码 class object:""" The most base type """def __delattr__(self, *args, **kwargs): signature unknown""" Implement dela…

MybatisPlus入门和分页和条件查询里面的条件和null值的处理方式和查询投影和查询条件设置和id生成相关和逻辑删除

MybatisPlus 简化了mybatis之前的在springboot整合MyBatis时需要自己写sql语句在接口中&#xff0c;现在只需要让接口继承BaseMapper<实体类>&#xff0c;然后在测试类中接口.增删改查方法&#xff08;&#xff09;即可 不用像springboot整合mybatis一样勾选spring web…

第三章 游戏对象基本操作

创建游戏世界的第一步&#xff0c;就是创建一个一个的游戏对象。当然&#xff0c;大部分的游戏对象都是3D模型&#xff0c;是需要先导入到Unity工程里面后再使用的。这里&#xff0c;我们使用Unity自带的一些基本游戏对象来说明场景中的一些基本操作。在DirectX的课程中&#x…