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

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

也可以看看见我的队友写的记忆化搜索东北林业大学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.mfbz.cn/a/736268.html

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

相关文章

【区块链】区块链架构设计:从原理到实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 区块链架构设计&#xff1a;从原理到实践引言一、区块链基础概念1.1 区块链定义…

4.1 四个子空间的正交性

一、四个子空间的正交性 如果两个向量的点积为零&#xff0c;则两个向量正交&#xff1a; v ⋅ w v T w 0 \boldsymbol v\cdot\boldsymbol w\boldsymbol v^T\boldsymbol w0 v⋅wvTw0。本章着眼于正交子空间、正交基和正交矩阵。两个子空间的中的向量&#xff0c;一组基中的向…

网络知识 思维导图

计算机网络基础知识点多且杂&#xff0c;想要系统地学习&#xff0c;思维导图肯定是必不可少的。今天整理了38张思维导图&#xff0c;帮助你轻松理清思路&#xff0c;快速掌握关键内容。建议你收藏起来慢慢看&#xff0c;在看过之后最好能重新动手画一画&#xff0c;让计算机网…

TCP与UDP_三次握手_四次挥手

TCP vs UDP TCP数据 具体可以通过Cisco Packet Tracer工具查看&#xff1a; UDP数据 三次握手、四次挥手 为什么是3/4次&#xff1f;这牵扯到单工、双工通信的问题 TCP建立连接&#xff1a;表白 TCP释放连接&#xff1a;分手 TCP—建立连接—三次握手 解释&#xff1a; 首先&…

RTSP协议分析与安全实践

RTSP协议&#xff0c;全称实时流协议(Real Time Streaming Protocol)&#xff0c;前文已经简单介绍了RTSP相关协议&#xff1b; RTSP和RTP(RTCP) 这里再提一下RTSP和RTP/RTCP、RSVP的关系&#xff1b;如图&#xff1a; RTSP和HTTP 相似性&#xff1a;RTSP和HTTP协议都使用纯…

Linux简单使用——配置仓库

虚拟机和Xshell连接 在虚拟机上打开终端查看IP 在Xshell上建立会话 输入ssh root192.168.231.123 防火墙关闭 、 重启计算机命令 删除文件 然后ls查看 清除之前的垃圾 最后做一下命令缓存

借助AI快速提高英语听力:如何获得适合自己的听力材料?

英语听力是英语学习中的一个重要组成部分&#xff0c;它对于提高语言理解和交流能力至关重要。可理解性学习&#xff08;comprehensible input&#xff09;是语言习得理论中的一个概念&#xff0c;由语言学家Stephen Krashen提出&#xff0c;指的是学习者在理解语言输入的同时&…

全栈人工智能工程师:现代博学者

任何在团队环境中工作过的人都知道&#xff0c;每个成功的团队都有一个得力助手——无论你的问题性质如何&#xff0c;他都能帮助你。在传统的软件开发团队中&#xff0c;这个人是一个专业的程序员&#xff0c;也是另一种技术的专家&#xff0c;可以是像Snowflake这样的数据库技…

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…

自2008年金融危机以来首次,欧洲AAA级CMBS投资者面临亏损

在欧洲预期损失之前&#xff0c;美国AAA级CMBS投资者已经遭受了打击。即便是最高信用等级的投资也不再安全&#xff0c;全球金融系统可能存在一些严重的问题。 历史罕见&#xff0c;最安全的AAA级债权人&#xff0c;在没有发生经济危机的情况下&#xff0c;出现了损失&#xff…

【jenkins1】gitlab与jenkins集成

文章目录 1.Jenkins-docker配置&#xff1a;运行在8080端口上&#xff0c;机器只要安装docker就能装载image并运行容器2.Jenkins与GitLab配置&#xff1a;docker ps查看正在运行&#xff0c;浏览器访问http://10....:8080/2.1 GitLab与Jenkins的Access Token配置&#xff1a;不…

快排(前后指针实现)

前言 快排解决办法有很多种&#xff0c;这里我再拿出来一种前后指针版本 虽然这个版本的时间复杂度和霍尔一样&#xff0c;逻辑也差不多&#xff0c;但是实际排序过程&#xff0c;确实会比霍尔慢一点 快排gif 快排前后指针实现逻辑&#xff1a; 前后指针实现逻辑(升序):单趟排序…

西瓜视频基于 Hertz 的微服务落地实践

# 1. 西瓜视频微服务架构设计 ## 1.1 西瓜视频介绍 **西瓜视频**是一个开眼界、涨知识的视频 App&#xff08;Informative Video Platform&#xff09;&#xff0c;作为国内领先的**中长视频**平台&#xff0c;它源源不断地为不同人群提供优质内容&#xff0c;让人们看到更丰…

从零开始搭建一个酷炫的个人博客

效果图 一、搭建网站 git和hexo准备 注册GitHub本地安装Git绑定GitHub并提交文件安装npm和hexo&#xff0c;并绑定github上的仓库注意&#xff1a;上述教程都是Windows系统&#xff0c;Mac系统会更简单&#xff01; 域名准备 购买域名&#xff0c;买的是腾讯云域名&#xf…

【web1】标签,css,js

文章目录 1.标签&#xff1a;input1.1 html&#xff1a;HTML&#xff08;用于创建网页结构&#xff09;&#xff0c;CSS&#xff08;对页面进行美化&#xff09;&#xff0c;JavaScript&#xff08;用于与用户交互&#xff09;1.2 文本标签&#xff1a;字体属性1.3 a标签&#…

win32API(CONSOLE 相关接口详解)

前言&#xff1a; Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c;它同时也是⼀个很⼤的服务中⼼&#xff0c;调⽤这个服务中⼼的各种服务&#xff08;每⼀种服务就是⼀个函数&#xff09;&#xff0c;可以帮应⽤程式达到开启视窗、描绘图形…

解析JSON字符串

QJsonDocument类用于解析JSON字符串&#xff0c;

android studio 模拟器文件查找

android studio 模拟器文件查找 使用安卓模拟器下载文件后通常无法在系统硬盘上找到下载的文件&#xff0c;安卓 studio studio 其实提供了文件浏览工具&#xff0c;找到后可以直接使用 Android studio 打开 打开 Android studioview 菜单view > Tool Windows > Device…

智慧校园的作用是什么?

在近几年&#xff0c;智慧校园以其独有的姿态&#xff0c;悄然改变着教育的面貌。想象一下&#xff0c;当物联网、大数据、人工智能这些前沿技术与传统校园深度融合&#xff0c;教育空间不再局限于实体教室&#xff0c;知识获取也不再受制于时间与地点&#xff0c;一个更加开放…