6月21日训练 (东北林业大学)(个人题解)

news2025/1/11 7:47:49

前言:

  这次训练是大一大二一起参加的训练,总体来说难度是有的,我和队友在比赛时间内就写出了四道题,之后陆陆续续又补了了三道题,还有一道题看了学长题解后感觉有点超出我的能力范围了,就留给以后的自己吧。话不多说,上正文。

正文:

  Problem:A 幸运数字:

#include <bits/stdc++.h>
using namespace std;
int sum,ans;
int main()
{
    int n,t;cin>>n;
    for(int i=1;i<=n;i++){
            sum=0;t=i;
    while(1){
        sum+=t%10;
        if(t/10==0&&t%10==0)
            break;
        t=t/10;
    }
    if(i%sum==1) ans++;
    }
    cout<<ans<<endl;
    return 0;
}

简单的签到题,直接枚举判断就行了。

Problem:B 子数组和:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1010;
LL a[N];
int main() {
	int n, k;
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		a[i] += a[i - 1];
	}
	bool flag = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = i; j <= n; j++) {
			LL res = a[j] - a[i - 1];
			if (res == k) {
				flag = 1;
				cout << i << " " << j;
				return 0;
			}
		}
	}
	cout << -1;
}

先做前缀和,在循环枚举即可。

Problem:C 搭积木(待补):

学长说这题需具备树状数组、线段树等任一种支持单点修改+区间查询的数据结构,以及二位偏序的相关知识。

也可以看看见我的队友写的记忆化搜索东北林业大学6.21训练补题-CSDN博客。

Problem:D 最大子序列:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[10005];int dp1[10005],dp2[10005];
vector<int> low;
int main(){
	int n;
	while(cin>>n){
	int ans=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	dp1[1]=1;
	low.clear();
	low.push_back(a[1]);
	for(int i=2;i<=n;i++){
		if(a[i]>low.back())low.push_back(a[i]);
		else {
			*lower_bound(low.begin(),low.end(),a[i])=a[i];
		}
		dp1[i]=lower_bound(low.begin(),low.end(),a[i])-low.begin()+1;
		//cout<<dp1[i]<<endl;
	}
	//
	dp2[n]=1;
	low.clear();
	low.push_back(a[n]);
	for(int i=n-1;i;i--){
		if(a[i]>low.back())low.push_back(a[i]);
		else {
			*lower_bound(low.begin(),low.end(),a[i])=a[i];
		}
		dp2[i]=lower_bound(low.begin(),low.end(),a[i])-low.begin()+1;
		//cout<<dp2[i]<<endl;
	}
	for(int i=1;i<=n;i++){
		if(dp1[i]>1&&dp2[i]>1){
			ans=max(ans,2*min(dp1[i],dp2[i])-1);
		}
		else ans=max(1,ans);
		//if(dp1[i]<=dp2[i+1])ans=max(ans,2*dp1[i]);
		//if(dp1[i]>=dp2[i+1])ans=max(ans,2*dp2[i+1]);
	}
	//cout<<n<<" "<<ans<<endl;
	cout<<ans<<endl;}
	return 0;
}

解释这道题之前我要先吐槽一下出题人的语文水平,整个题干写的雨里雾里的,什么是前n+1个数和后n+1个数1 2 3 4 5 5 4 3 2 1这算不算一个长度为10的序列,这些题干和样例都没表示清楚。

这题有点像我之前写的合唱队形:算法基础精选题单 动态规划(dp)(递推+线性dp)(个人题解)-CSDN博客

这题与那题区别在于递增递减序列长度要一样且不为0(都不为0),如果只有一个数那长度为1。

所以我们依旧是求两次最长上升子序列,这里直接两层循环会超时,所以第二层循环我们用二进制来优化掉。

Problem:E 阿华找阿璐:

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+500;
int prime[N],b[N];
int cnt=0,maxl=1e6+499;
int init(){
    memset(b,1,sizeof(b));
    b[0]=b[1]=0;
    for(int i=2;i<=maxl;i++){
        if(b[i]) prime[++cnt]=i;
        for(int j=1;j<=cnt&&prime[j]*i<=maxl;j++){
            b[prime[j]*i]=0;
            if(i%prime[j]==0) break;
        }
    }
    return 0;
}
int main()
{
    ios::sync_with_stdio(0);
    init();
    int t,m,f=0;cin>>t;
    while(t--){
        cin>>m;
        for(int i=1;i<10005;i++){
            if(prime[prime[i]]>=m)
            {
                cout<<prime[prime[i]]<<endl;f=1;break;
            }
        }
        //if(f==0) cout<<"No"<<endl;
    }
    return 0;
}

先初始化素数数组,prime[i]表示第i个素数,prime[prime[i]]就表示两次去素数后该值的初始值,之后再枚举找到第一个大于 m 的数即可。

Problem:F 阿祥和阿华:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	int t;
	cin>>t;
	while(t--){
		ll ans=1;
		ll n;
		cin>>n;
		for(int i=2;i*i<=n;i++){
			int cnt=0;
			if(n%i==0){
				while(n%i==0){
					cnt++;
					n/=i;
				}
				ans*=(cnt*2+1);
			}
		}
		if(n>1)ans*=3;
		cout<<(ans+1)/2<<endl;
	}
}

这题用到了约数定理,原式可以变化为 n^2 = (n - x) * ( n - y)

即:求n^2的约数组合数,n^2的质因数与n的质因数相同,个数为n的两倍,所以我们先求n的质因数,原本求组合数的公式是循环乘(x+1),x,那么n^2的组合数就是循环乘(x*2+1)最后在乘个(1*2+1),因为大于sqrt(n)的质因数有且仅有一个(除1以外),所以最后有if(n>1)ans*=3;

最后因为(2,3)与(3,2)算同一组,所以答案要取取一半,又因为可能会出现(x,x)这一组不需除2的情况,所以我们最后要(ans+1)/2。

Problem:G 数字游戏:

#include<bits/stdc++.h>
using namespace std;
int a[3005];
int book[10005];
int main(){
	int n;
	while(cin>>n){
		memset(book,0,sizeof(book));
		int k;
		cin>>k;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		for(int i=1;i<=n;i++){
			for(int j=i+1;j<=n;j++){
				book[a[i]+a[j]]++;
				//cout<<a[i]+a[j]<<endl;
			}
		}
		int t=k;
		for(int i=10000;i>=0;i--){
			while(k>0&&book[i]>0){
				if(t==k)cout<<i;
				else cout<<" "<<i;
				k--;book[i]--;
			}
		}
		cout<<endl;
	}
	return 0;
}

用sort排序会超时,但这题数字范围不是很大,我们可以用桶排做,注意和的总数不一定大于m(因为这个卡了超级久)。

Problem:H 剪花布条:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	while(n--){
		string a,b;
		cin>>a>>b;
		int l=a.size()-b.size();
		if(l<0)l=0;
		int r=0,ans,res=0,cnt=0;
		for(int i=l;i<a.size();i++){
			ans=0;int x=i;
			for(int j=0;j<b.size()&&x<a.size();j++,x++){
				//cout<<a[x]<<b[j]<<endl;
				if(a[x]==b[j])ans++;
				else break;
				//cout<<ans<<endl;
			}
			//cout<<x<<" "<<ans<<endl;
			if(x==a.size())res=max(res,ans);
		}
		cout<<res<<endl;
	}
	return 0;
}

一开始看这数据范围我还以为暴力做不了,但测评数据估计不是很大,暴力也卡过去了。做法就是从头到尾两个循环遍历,太暴力了以至于我比赛时都不敢写。

后记:

  C题和队友讨论了一下发现好像能做,我再去看看这题吧。

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

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

相关文章

常见的七大排序

目录 前言 冒泡排序 选择排序 插入排序 堆排序 希尔排序 快排 归并排序 前言 本文介绍七种常见的排序方式&#xff1a;冒泡排序&#xff0c;选择排序&#xff0c;插入排序&#xff0c;堆排序&#xff0c;希尔排序&#xff0c;快排&#xff0c;归并排序 冒泡排序 将每2…

Day59 代码随想录打卡|二叉树篇---把二叉搜索树转换为累加树

题目&#xff08;leecode T538&#xff09;&#xff1a; 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。…

浅聊Cookie

前言 在客户端使用Nuxt的useFetch调用接口并存储cookie&#xff0c;发现一些趣事~ cookie存储需要遵守同源策略~ 理论我们是知道的&#xff0c;但具体是怎么一回事呢~ 实现 在Nuxt中是这样的~ 直接访问 Nuxt <template><div>{{ data }}</div> </te…

【chatgpt】train_split_test的random_state

在使用train_test_split函数划分数据集时&#xff0c;random_state参数用于控制随机数生成器的种子&#xff0c;以确保划分结果的可重复性。这样&#xff0c;无论你运行多少次代码&#xff0c;只要使用相同的random_state值&#xff0c;得到的训练集和测试集划分就会是一样的。…

Vision Pro的3D跟踪能力:B端应用的工作流、使用教程和经验总结

Vision Pro的最新3D跟踪能力为工业、文博、营销等多个B端领域带来了革命性的交互体验。本文将详细介绍这一功能的工作流、使用教程,并结合实际经验进行总结。 第一部分:工作流详解 一、对象扫描 使用Reality Composer iPhone应用程序对目标对象进行3D扫描,如吉他或雕塑,…

粉笔1000题——判断推理

目录 一、图形推理1. 位置规律平移旋转、翻转 二、定义判断三、类比推理四、逻辑判断 一、图形推理 1. 位置规律 平移 旋转、翻转 二、定义判断 三、类比推理 四、逻辑判断

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇PTH哈希PTT票据PTK密匙Kerberoast攻击点TGTNTLM爆破

红队内网攻防渗透 1. 内网横向移动1.1 首要知识点1.2 PTH1.2.1 利用思路第1种:利用直接的Hash传递1.2.1.1、Mimikatz1.2.2 利用思路第2种:利用hash转成ptt传递1.2.3 利用思路第3种:利用hash进行暴力猜解明文1.2.4 利用思路第4种:修改注册表重启进行获取明文1.3 PTT1.3.1、漏…

养殖自动化温控系统:现代养殖场的智能守护神

现代农业养殖业中&#xff0c;养殖自动化温控系统已经成为提高生产效率和保障动物福利的关键技术之一。本篇文章将深入介绍养殖自动化温控系统的原理、组成、优势及其在不同类型养殖场中的应用实例&#xff0c;并展望该技术的未来发展。 一、养殖自动化温控系统概述 养殖自动…

LabVIEW编程控制ABB机械臂

使用LabVIEW编程控制ABB机械臂是一项复杂但十分有价值的任务。通过LabVIEW&#xff0c;可以实现对机械臂的精确控制和监控&#xff0c;提升自动化水平和操作效率。 1. 项目规划和硬件选型 1.1 确定系统需求 运动控制&#xff1a;确定机械臂需要执行的任务&#xff0c;如抓取、…

易优cms内核简洁文章资讯作文范文网站模板源码(带手机版)

易优cms内核简洁文章资讯作文范文网站模板源码 带手机版 适用于博客、文章、资讯类网站使用 界面预览 易优cms内核简洁文章资讯作文范文网站模板源码

Python题目

实例 3.1 兔子繁殖问题&#xff08;斐波那契数列&#xff09; 兔子从出生后的第三个月开始&#xff0c;每月都会生一对兔子&#xff0c;小兔子成长到第三个月后也会生一对独自。初始有一对兔子&#xff0c;假如兔子都不死&#xff0c;那么计算并输出1-n个月兔子的数量 n int…

element-plus 表单组件 之element-form

elment-plus的表单组件的标签有el-form,el-form-item。 单个el-form标签内包裹若干个el-form-item,el-form-item包裹具体的表单组件&#xff0c;如输入框组件&#xff0c;多选组件&#xff0c;日期组件等。 el-form组件的主要作用是&#xff1a;提供统一的布局给其他表单组件&…

FPGA学习网站推荐

FPGA学习网站推荐 本文首发于公众号&#xff1a;FPGA开源工坊 引言 FPGA的学习主要分为以下两部分 语法领域内知识 做FPGA开发肯定要首先去学习相应的编程语言&#xff0c;FPGA开发目前在国内采用最多的就是使用Verilog做开发&#xff0c;其次还有一些遗留下来的项目会采用…

长亭谛听教程部署和详细教程

PPT 图片先挂着 挺概念的 谛听的能力 hw的时候可能会问你用过的安全产品能力能加分挺重要 溯源反制 反制很重要感觉很厉害 取证分析 诱捕牵制 其实就是蜜罐 有模板直接爬取某些网页模板进行伪装 部署要求 挺低的 对linux内核版本有要求 需要root 还有系统配置也要修改 …

leetcode刷题日记

题目描述 解题思路 基本思想&#xff0c;将数组复制一份&#xff0c;按照位置取余&#xff0c;确实做出来了&#xff0c;但是这样时间和空间上的资源比较多。看到切片法&#xff0c;感觉到很新&#xff0c;思路很好&#xff0c;用来记录。 代码 python class Solution:def ro…

springboot + Vue前后端项目(第十八记)

项目实战第十八记 写在前面1. 前台页面搭建&#xff08;Front.vue&#xff09;2. 路由3.改动登录页面Login.vue4. 前台主页面搭建Home.vue总结写在最后 写在前面 本篇主要讲解系统前台搭建&#xff0c;通常较大的项目都会搭建前台 1. 普通用户登录成功后前台页面效果&#xf…

Flutter 如何发布安卓应用?

android:hardwareAccelerated“true” android:windowSoftInputMode“adjustResize”> <meta-data android:name“flutterEmbedding” android:value“2” /> Flutter生成的文件建议是大部分内容可以保留不动&#xff0c;但是可以根据需要进行修改。 具体可能要修…

一款有趣的Python库绘制风向图,小白容易上手

利用 Python 绘制风向图 绘制风向图通常使用 matplotlib 库的 Barbs 类来实现.这个类用于绘制风向和风速的矢量场,可以实现不同的风向图风格. 安装 ## 命令安装 matplotlib 库&#xff1a;pip install matplotlib用法 下面是一个简单的示例代码,绘制风向图&#xff1a; 使…

分布式,容错:10台电脑坏了2台

由10台电脑组成的分布式系统&#xff0c;随机、任意坏了2台&#xff0c;剩下的8台电脑仍然储存着全部信息&#xff0c;可以继续服务。这是怎么做到的&#xff1f; 设N台电脑&#xff0c;坏了H台&#xff0c;要保证上述性质&#xff0c;需要有冗余&#xff0c;总的存储量降低为…

路由

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 客户端&#xff08;例如浏览器&#xff09;把请求发送给 Web 服务器&#xff0c;Web 服务器再把请求发送给 Flask程序实例。程序实例需要知道对每个U…