[CSP-J 2024] 小木棍

news2025/2/5 15:41:14

题目传送门

P11229 [CSP-J 2024] 小木棍

题解思路:

1、首先想到的是搜索,全排列填盒子的思想,小木棍数够组成某个数,把某个数放到盒子里,这里就是累加到sum上,还做了个剪枝,中间如果已经大于结果res,不再进行搜索,得了20分。仔细看了一下数据,n最大10的5次方,很显然能够组成的数非常大,大的long long都存不下。

20分搜索代码如下,尽管不对,但还是挺标准的全排列填盒子搜索思想的。

#include<bits/stdc++.h>
using namespace std;
const int N = 100005;
int t, n;
int nums[10]={6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int box[N], flag; 
long long res;
void dfs(int idx, int sum, int n){
	if(sum > res) return;
	if(n == 0){
		flag = 1;
		res = sum;
	}
	for(int i=0; i<10; i++){
		if(n >= nums[i]){
			if(i == 0 && idx == 0) continue;
			box[idx] = i;
			dfs(idx+1, sum*10+i, n-nums[i]);
		}
	}
}
int main() {
	cin>>t;
	while(t--){
		cin>>n;
		flag = 0;
		res = 2147483647;
		dfs(0, 0, n);
		if(flag==0) cout<<-1<<endl;
		else cout<<res<<endl;
	}
	return 0;
}

2、考虑到能够组成的数非常大,大的long long都存不下,long long存不下的数用什么,这不就马上想到了大整数。思路2:使用字符串存储整数。这次得了10分,其他全部超时。看来思路1多得的10分是瞎猫碰上死耗子。超时算是从根本上否决了搜索的思路。

#include<bits/stdc++.h>
using namespace std;
const int N = 100005;
int t, n;
int nums[10]={6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
string res;
bool compare(string s1, string s2){
	if(s1.size() > s2.size() || (s1.size() == s2.size() && s1>s2)) return true;
	return false;
}
void dfs(bool first, string sum, int n){
	if(res != "" && compare(sum, res)) return;
	if(n == 0){
		res = sum;
		return;
	} 
	for(int i=0; i<10; i++){
		if(n >= nums[i]){
			if(i == 0 && first) continue;
			dfs(false, sum+char(i+'0'), n-nums[i]);
		}
	}
}
int main() {
	cin>>t;
	while(t--){
		cin>>n;
		res = "";
		dfs(true, "", n);
		if(res == "") cout<<-1<<endl;
		else cout<<res<<endl;
	}
	return 0;
}

3、再次返回题目,题目对于数据范围的描述,提点了特殊性质A和特殊性质B,那在这两种情况下很可能存在某个规律,经过举例数据验证:当满足特殊性质A:n是7的倍数,全由8组成,一共 (n/7) 个8;当满足特殊性质B:n是7的倍数加1,开头为 10,剩下全是8,一共 (n/7-1) 个8。把两种特殊情况单独处理,分数飙升到了70分。
在这里插入图片描述
4、特殊情况下有规律,寻求非特殊情况下是否也有规律呢,打表(前边的搜索方案也不是毫无用处吗,这不就用上了吗),打表发现,除了个别数据,都是存在规律的,完全可以从前推到后,本题是多测试样例,为了避免重复计算,考虑空间换时间,把1~10^5都存下来,计算那个直接查表。
在这里插入图片描述
0分代码,倒是不超时了,全部样例超存储,空间换时间也有看实际情况啊。

#include<bits/stdc++.h>
using namespace std;
const int N = 100001;
int n, t;
string res[N]={"", "-1", "1","7","4","2","6","8","10","18","22","20","28","68","88","108","188","200"};
int main() {
	for(int i=18; i<N; i++){
		res[i] = res[i-7]+"8";
	}
	cin>>t;
	while(t--){
		cin>>n;
		cout<<res[n]<<endl;
	}
	return 0;
}

5、观察打表可知,1~17存在部分数据不符合规律,使用固定数组存储。18及以后的数据可分解为若干个7 加 一个小于等于17的数字。最后组的数字即:一个小于等于17的数字可组成的数+若干个8(可分出7的个数)

满分代码横空出世

#include<bits/stdc++.h>
using namespace std;
int n, t;
string res[18]={"", "-1", "1","7","4","2","6","8","10","18","22","20","28","68","88","108","188","200"};
int main() {
	cin>>t;
	while(t--){
		cin>>n;
		if(n<18) cout<<res[n]<<endl;
		else{
			string tmp="";
			while(n>=18){
				tmp += "8";
				n -= 7;
			}
			tmp = res[n]+tmp;
			cout<<tmp<<endl;
		}
	}
	return 0;
}

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

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

相关文章

AI运用落地思考:如何用AI进行物料条码的识别及异常检测?

一、AI进行物料条码识别 &#xff08;一&#xff09;基于深度学习的方法 图像预处理 首先需要对包含物料条码的图像进行预处理。这包括调整图像的大小、对比度、亮度等操作&#xff0c;以便提高条码图像的清晰度和可识别性。例如&#xff0c;如果图像较暗&#xff0c;可以通过…

基于STM32的电能监控系统设计:ModBus协议、RS-485存储和分析电能数据(代码示例)

一、项目概述 随着智能电网的发展&#xff0c;电能管理的科学性与有效性变得越来越重要。本项目旨在设计并实现一个基于STM32103C8T6单片机的电能监控系统&#xff0c;该系统可以实时采集、存储和分析电能数据&#xff0c;帮助用户实现对电能的高效管理。 项目目标 实时监控&…

从数据库模型设计到字段设计,用自然语言实现数据库开发,颠覆传统的数据库开发模式

前言 在数据库开发过程中&#xff0c;开发者经常面临以下困扰&#xff1a; 1. 焦头烂额的数据库设计阶段 在设计数据库阶段&#xff0c;开发者需要全面考虑表结构、关系模型、字段定义等&#xff0c;稍有不慎就会影响后续的开发与维护&#xff0c;常常让人感到无从下手。 2…

51c自动驾驶~合集39

我自己的原文哦~ https://blog.51cto.com/whaosoft/12707676 #DiffusionDrive 大幅超越所有SOTA&#xff01;地平线DiffusionDrive&#xff1a;生成式方案或将重塑端到端格局&#xff1f; 近年来&#xff0c;由于感知模型的性能持续进步&#xff0c;端到端自动驾驶受到了来…

docker安装hadoop环境

一、使用docker搭建基础镜像 1、拉取centos系统镜像 # 我这里使用centos7为例子 docker pull centos:7 2、创建一个dockerfiler文件&#xff0c;用来构建自定义一个有ssh功能的centos镜像 # 基础镜像 FROM centos:7 # 作者 #MAINTAINER hadoop ADD Centos-7.repo /etc/yum.re…

多级缓存设计实践

缓存是什么&#xff1f; 缓存技术是一种用于加速数据访问的优化策略。它通过将频繁访问的数据存储在高速存储介质&#xff08;如内存&#xff09;中&#xff0c;减少对慢速存储设备&#xff08;如硬盘或远程服务器&#xff09;的访问次数&#xff0c;从而提升系统的响应速度和…

状态模式S

状态模式&#xff08;State Pattern&#xff09;是行为设计模式的一种&#xff0c;它允许一个对象在其内部状态发生改变时改变其行为。这个对象被视为类型的有限状态机&#xff08;Finite State Machine&#xff09;。 在状态模式中&#xff0c;我们创建表示各种状态的对象和一…

数据结构 (23)并查集与等价类划分

一、并查集 并查集&#xff08;Union-Find Set或Disjoint Set&#xff09;是一种数据结构&#xff0c;用于处理一些不相交集合&#xff08;disjoint sets&#xff09;的合并及查询问题。它通常表示为森林&#xff0c;并用数组来实现&#xff08;类似于二叉堆&#xff09;。在并…

【Linux】开启你的Linux之旅:初学者指令指南

Linux相关知识点可以通过点击以下链接进行学习一起加油&#xff01; 在 Linux 开发中&#xff0c;GDB 调试器和 Git 版本控制工具是开发者必备的利器。GDB 帮助快速定位代码问题&#xff0c;Git 则提供高效的版本管理与协作支持。本指南将简明介绍两者的核心功能与使用技巧&…

Python语法1

Python语法1 作者&#xff1a;王珂 邮箱&#xff1a;49186456qq.com 文章目录 Python语法1[TOC] 前言一、环境搭建1.1 安装Python解释器1.2 安装第三方包1.3 安装Pycharm1.4 虚拟环境 二、Python语法2.1 基础语法2.1.1 注释2.1.2 变量2.1.3 数据类型2.1.4 关键字和标识符 2.2…

普及组集训--图论最短路径

定义&#xff1a;表示顶点u到顶点v的一条边的权值&#xff08;边权&#xff09; 最短路径算法有常见的四种&#xff1a;floyd&#xff0c;dijkstra&#xff0c;Bellman-Ford&#xff0c;SPFA 不过Bellman-Ford并不常用&#xff0c;所以本文不提&#xff1b; 重点在于dijkstr…

蓝桥杯第 23 场 小白入门赛

一、前言 好久没打蓝桥杯官网上的比赛了&#xff0c;回来感受一下&#xff0c;这难度区分度还是挺大的 二、题目总览 三、具体题目 3.1 1. 三体时间【算法赛】 思路 额...签到题 我的代码 // Problem: 1. 三体时间【算法赛】 // Contest: Lanqiao - 第 23 场 小白入门赛 …

前缀和篇——繁星斗斗数字交织中,觅得效率明月辉光(1)

前言 在这片无边无际的数字海洋中&#xff0c;如何从中提取出有价值的讯息&#xff0c;成为了计算机科学中的一项重要课题。前缀和算法&#xff0c;作为一种巧妙的技术&#xff0c;恰如其名——通过计算序列中各个元素的前缀和&#xff0c;能够为我们提供一种高效的查询方式&a…

STM32 HAL库 + LM2904运算放大器 + ADC + VDO温度传感器:电路设计及代码实现

本文将详细介绍如何使用STM32F407的HAL库&#xff0c;实现通过单通道ADC采集VDO温度传感器的信号&#xff0c;并通过串口将采集到的温度值打印输出。具体流程包括&#xff1a;通过分压电阻将获得VDO温度传感器的分压电压&#xff0c;再利用运算放大器LM2904对信号进行放大&…

Python酷库之旅-第三方库Pandas(252)

目录 一、用法精讲 1191、pandas.tseries.offsets.BusinessMonthBegin.n属性 1191-1、语法 1191-2、参数 1191-3、功能 1191-4、返回值 1191-5、说明 1191-6、用法 1191-6-1、数据准备 1191-6-2、代码示例 1191-6-3、结果输出 1192、pandas.tseries.offsets.Busine…

【Linux服务器】CPU问题排查

概述 总体排查思路 总体观察&#xff0c;htop命令观察系统负载程度 检查CPU占用高的进程检查CPU硬件信息是否为问题根源从宏观到细节分析系统IO情况最后检查系统日志 排查思路 系统负载 通过htop命令查看系统负载&#xff0c;通过系统负载可以判断系统是否繁忙&#xff0c;主…

详解MyBatis之篇一

目录 MyBatis 定义 使用MyBatis操作数据库 创建项目 配置 演示 UserInfo.java UserInfoMapper UserInfoMapperTest 数据准备 自动生成测试类 运行结果 MyBatis 定义 MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避…

编译器优化技术

方法内联 逃逸分析 公共子表达式消除 数据边界检查消除

汽车IVI中控开发入门及进阶(三十五):架构QML App Architecture Best Practices

在Qt/QML工程的架构中,架构很重要,虽然本身它有分层,比如QML调用资源文件(图片等)显示GUI界面,后面的CPP文件实现界面逻辑,但是这个分类还有点粗。在实际开发中,界面逻辑也就是基于类cpp的实现,也开始使用各种面向对象的设计模式,实现更加优秀的开发架构,这点尤其在…

本地Docker部署个人在线音乐平台Melody结合内网穿透远程访问听音乐

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…