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

前言:

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

正文:

  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 搭积木(待补):

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

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题和队友讨论了一下发现好像能做,我再去看看这题吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

带百分比的进度条控件(ProgressBar)源码

带百分比的进度条控件&#xff08;ProgressBar&#xff09;&#xff1a; 源码下载地址&#xff1a;https://download.csdn.net/download/wgxds/89472915

淘酒屋荣获2024中法贸易杰出服务商称号暨夏季窖主大会圆满召开

淘酒屋荣获中法贸易杰出服务商称号&#xff0c;暨闪光的创始人2024夏季窖主大会圆满召开 2024年&#xff0c;作为中法建交60周年的重要节点&#xff0c;同时迎来了中法文化旅游年&#xff0c;这为两国文化交流与合作开启了新的篇章。在庆祝中法贸易交流的重要时刻&#xff0c;…

[SAP ABAP] 追加内表数据

向内表中逐条追加数据记录 语法格式 APPEND <wa> TO <itab>. <wa>&#xff1a;代表工作区 <itab>&#xff1a;代表内表 示例1 结果显示&#xff1a; 将一个内表中的所有数据记录添加到另一个内表中 语法格式 APPEND LINES OF <itab1> TO <…

Android焦点机制结合WMS

文章前提&#xff1a; 了解WMS基本作用了解window的概念&#xff0c;phoneWindow&#xff0c;rootViewImpl了解view的事件分发 开始&#xff1a; 讲三件事情&#xff1a; window的创建&#xff0c;更新焦点的更新事件的分发 Window的创建&#xff0c;更新&#xff1a; wi…

赵丽颖纯白茉莉绽放温柔之美

赵丽颖纯白茉莉&#xff0c;绽放温柔之美在这个繁忙喧嚣的娱乐圈&#xff0c;赵丽颖以其独特的魅力&#xff0c;成为了无数人心中的白月光。近日&#xff0c;赵丽颖工作室发布了一组live图&#xff0c;她身着一袭温柔白裙&#xff0c;宛如一朵盛开的纯白茉莉花&#xff0c;美得…

论文阅读03(基于人类偏好微调语言模型)

1.主题 基于人类偏好微调语言模型&#xff08;Fine-Tuning Language Models from Human Preferences&#xff09; 出处&#xff1a; Fine-Tuning Language Models from Human Preferences、 2.摘要 奖励学习使得强化学习&#xff08;RL&#xff09;可以应用于那些通过人类判断…

深度学习windows环境配置

1 下载CUDA和cudnn 详见文章 CUDA与CUDNN在Windows下的安装与配置&#xff08;超级详细版&#xff09;_windows cudnn安装-CSDN博客 我电脑的CUDA下载链接如下 ​​​​​https://developer.nvidia.com/cuda-12-1-0-download-archive?target_osWindows&target_archx86…

Validation校验

文章目录 Validation校验作用依赖坐标UserController接收客户端注册用户请求的方法请求参数封装实体User的结构校验分组 Validation校验 作用 服务端接收前端传递的请求从参数的时候&#xff0c;可以对请求参数进行自动校验。 场景&#xff1a;通过postman向服务端发送一个注…

指纹浏览器与虚拟机的区别及在跨境电商中的应用

在如今数字化世界中&#xff0c;隐私和安全变得愈发重要。许多人在网络上进行敏感操作&#xff0c;如网上购物、在线银行、社交媒体管理等。为了保护自己的隐私&#xff0c;人们常常会寻求一些额外的工具&#xff0c;比如指纹浏览器和虚拟机。这两种工具在保护个人隐私方面都有…

东郊到家类型小程序APP软件基于SpringBoot开发的系统源码

项目背景 在快节奏的现代生活中&#xff0c;人们越来越追求高效、便捷的生活方式。上门服务作为一种新型的服务模式&#xff0c;正逐渐受到广大用户的青睐。而这一切的背后&#xff0c;离不开技术的强大支撑。今天&#xff0c;我们就来探讨一下上门服务类型软件的技术魅力&…

4. DSL入门_01

1. 常见的DSL (1) 查询所有: 查询出所有数据&#xff0c;一般测试的时候使用&#xff0c;例如&#xff1a; match_all .但是受分页限制&#xff0c;一般返回10条数据 (2) 全文检索(full text)查询&#xff1a;利用分词器对用户输入内容分词&#xff0c;然后去倒排索引中匹配&a…

数据结构和算法(2)---- Stack 的原理和实现

Stack 的定义和结构 栈(Stack)是仅限于在表尾进行插入和删除的线性表 我们把允许插入和删除的一端称为栈顶(top)&#xff0c;另一端称为栈底(bottom)&#xff0c;不含任何元素的栈称为空栈&#xff0c;栈也被称为先进后出(Last In First Out)的线性表&#xff0c;简称LIFO结构…

为什么能通过文本分析情感?

通过文本分析情感&#xff0c;通常称为情感分析&#xff08;Sentiment Analysis&#xff09;或意见挖掘&#xff08;Opinion Mining&#xff09;&#xff0c;是自然语言处理&#xff08;NLP&#xff09;的一个分支。这项技术能够识别和提取文本中的主观信息&#xff08;对呀&am…

Linux操作系统处理器调度基本准则和实现

1&#xff0c;基本概念 在多道程序系统中&#xff0c;进程的数量往往多于处理机的个数&#xff0c;进程争用处理机的情况就在所难免。处理机调度是对处理机进行分配&#xff0c;就是从就绪队列中&#xff0c;按照一定的算法&#xff08;公平、低效&#xff09;选择一个进程并将…

windows端口被占用问题,杀死进程

描述&#xff1a;端口被占用 在使用IntelliJ IDEA运行程序时&#xff0c;可能会遇到端口占用的情况&#xff0c;这通常由以下几个原因引起&#xff1a; 1、同一程序多次启动&#xff1a;如果你没有正确关闭之前运行的程序实例&#xff0c;再次尝试运行相同的程序时&#xff0c;…

数据库系统概论(超详解!!!) 第十四节 数据库恢复技术

1.事务的基本概念 1.事务 事务(Transaction)是用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位。 事务和程序是两个概念&#xff0c; 在关系数据库中&#xff0c;一个事务可以是一条SQL语句&#xff…

Leetcode3185. 构成整天的下标对数目 II

Every day a Leetcode 题目来源&#xff1a;3185. 构成整天的下标对数目 II 解法1&#xff1a;哈希 本质思路类同经典的“两数之和”。枚举右&#xff0c;用哈希表维护左。 枚举 j&#xff0c;并维护 cnt[x] 表示所有满足 i < j 的下标 i 中&#xff0c;有几个 hours[i]…

5个视频人声分离方法:一键批量分离人声和背景音乐(操作指南)

视频人声分离指的是从视频文件中提取人声部分&#xff0c;将其与背景音乐分离。想要将视频人声分离&#xff0c;可以使用手机上的音频人声分离app、或电脑端专业的人声分离软件和在线剪辑工具实现&#xff0c;只需要导入文件就可以实现视频人声分离。 本文整理了以下几款视频人…

分治精炼宝库----归并排序应用( ´◔︎ ‸◔︎`)

目录 一.基本概念: 二.归并排序&#xff1a; 三.交易逆序对总数&#xff1a; 四.计算右侧小于当前元素的个数&#xff1a; 五.翻转对&#xff1a; 六.合并k个有序链表&#xff1a; 一.基本概念: &#x1f43b;在计算机科学中&#xff0c;分治法是一种很重要的算法。字面上的…

ImportError: No module named createrepo

我在用createrepo命令创建本地源时,出现如下: ImportError: No module named createrepo原因估计就是之前升级python2.6为2.7时导致(系统为centos7),看网上很多说, 修改/usr/share/createrepo/genpkgmetadata.py 第一行的python路径,但我试了根本无效 我是重新通过yu…