曲阜师范大学2023年暑期大一新生排位赛 题解

news2024/11/27 14:40:50

目录

A (1). Sum 详细点击:sum      //整除分块

B (2). Sort

C (3). String                              //字符串dp

D (4). Factor                ​​​​​​​        ​​​​​​​     //素数筛变式

E (5). Tree                ​​​​​​​        ​​​​​​​        //树形dp

F (6). Geometry                        //几何

G (7). Graph                         ​​​​​​​    //二分答案

H (8). Line                                //贪心

I (9). And / Or                       ​​​​​​​    //位运算

J (10). Mov                ​​​​​​​               //模拟


A (1). Sum 详细点击:sum

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)

ll T,x,y;

void solve() {
	ll res=0;
	cin>>x>>y;
	ll i=min((ll)sqrt(x),y);
	while(i*i+i+1>x)
		i--;
	res=(1+i)*i/2;
	for(ll l=i+1,r; l<=y,l+1<=x; l=r+1) {
		r=x/(x/(l+1))-1;
		r=min(r,y);
		if(l>r)
			break;
		res+=x/(l+1)*(r-l+1);
	}
	cout<<res<<"\n";
}

int main() {
	IOS;
	cin>>T;
	while(T--)
		solve();
	return 0;
}

B (2). Sort

使用stable_sort强行卡过,优化可了解:sort 学长Ashy深情讲解

#include<bits/stdc++.h>
using namespace std;

struct node {
	long long x,y;
} d[100001];
long long e[100001];
long long n,q,t,u,v;

bool cmp(node a,node b) {
	return a.x==b.x?a.y<b.y:a.x<b.x;
}

int main() {
    ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>q;
	for(long long i=1; i<=n; i++)
		cin>>d[i].x,d[i].y=i;
	/*
	for(int i=1; i<=n; i++)
		cout<<d[i].x<<" "<<d[i].y<<"\n";
	*/
	stable_sort(d+1,d+1+n,cmp);
	for(int i=1; i<=n; ++i)
		e[d[i].y]=i;
	while(q--) {
		cin>>t;
		if(t==1) {
			cin>>u>>v;
			d[e[u]].x=v;
			stable_sort(d+1,d+1+n,cmp);
			for(int i=1; i<=n; ++i)
				e[d[i].y]=i;
		} else {
			cin>>u;
			cout<<e[u]<<"\n";
		}
	}
	return 0;
}

在这提一下stable_sort和sort的区别,单纯从性能来讲sort性能更好,因为stable_sort要维护数据的稳定性,丧失了一部分性能,但在大部分数据顺序不变的情况下,stable_sort要比sort快很多

C (3). String

字符串dp,即区间dp

#include<bits/stdc++.h>
using namespace std;
//最长回文串子序列

int n;
string s;
int dp[2100][2100];
//字符串s在区间[i, j]范围内的最长回文子序列的长度
//dp[i][j] = dp[i+1][j-1] + 2;
//dp[i][j] = (dp[i+1][j] > dp[i][j-1]) ? dp[i+1][j] : dp[i][j-1];

int main() {
	cin>>n>>s;
	for (int i=0;i<n;i++)
		dp[i][i]=1;
	for (int len=2;len<=n;len++) {
		for (int i=0;i<=n-len;i++) {
			int j=i+len-1;
			if (s[i]==s[j]) {
				dp[i][j]=dp[i+1][j-1] + 2;
			} else {
				dp[i][j]=(dp[i+1][j]>dp[i][j-1])?dp[i+1][j]:dp[i][j-1];
			}
		}
	}
	cout<<n-dp[0][n-1];
	return 0;
}

D (4). Factor

用埃式筛暴力筛出来的,时间复杂度为O(nlogn)

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+1;

int n,a,ans;
bool vis[maxn];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1; i<=n; i++)
		cin>>a,vis[a]=true;
	for(int i=1; i<=maxn; i++)
		for(int j=i; j<=maxn; j+=i)
			if(vis[j]) {
				ans++;
				break;
			}
	cout<<ans;
	return 0;
}

E (5). Tree

树形DP模板题

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+10;

ll a[N],u,v;
ll f[N],tot;
struct Edge {
	int to,next;
} edges[N];
int head[N],edge_len,n;

void Add(int from,int to) {
	edges[++edge_len].next=head[from];
	edges[edge_len].to=to;
	head[from]=edge_len;
}
void Dfs(ll e,ll fa) {
	bool flag=0;
	f[e]+=a[e];
	for(int i=head[e]; ~i; i=edges[i].next) {
		if(edges[i].to!=fa) {
			flag=1;
			Dfs(edges[i].to,e);
			f[e]+=f[edges[i].to];
		}
	}
}

int main() {
	memset(head,-1,sizeof head);
	cin>>n;
	for(int i=1; i<=n; i++)
		cin>>a[i],tot+=a[i];
	for(int i=1; i<n; i++) {
		cin>>u>>v;
		Add(u,v);
		Add(v,u);
	}
	Dfs(1,0);
	ll mx=0;
	for(int i=2; i<=n; i++)
		mx=max(mx,abs(f[i]-(tot-f[i])));
	cout<<mx;
}

F (6). Geometry

把梯形补成三角形 

 补出来的三角形与等腰三角形是相似三角形,通过三角形相似我们可以得出来

\frac{h+H}{\frac{a}{2}}=\frac{c}{r}

H+d=\sqrt{r^2+c^2}

\frac{h+H}{a}=\frac{H}{b}

通过以上三式解方程就可以了。

#include<bits/stdc++.h>
using namespace std;
//梯形补成三角形
//按照比求三角形高与H圆心到三角形顶点的距离d+H
//H=b/(a-b)*h
//c=r*h*2/(a-b)
//d+H=sqrt(c*c+r*r)

double r,a,b,c,h,H,d;

int main() {
	cin>>r>>a>>b>>h;
	if(2*r<b){
		cout<<"Drop";
		return 0;
	}
	H=b/(a-b)*h*1.0;
	c=r*h*2.0/(a-b);
	d=sqrt(c*c+r*r)-H;
	cout<<"Stuck\n";
	cout<<fixed<<setprecision(7)<<d;
	return 0;
}

G (7). Graph

二分答案,judge函数用于判断给定的时间t是否满足从起点x到终点y的路径存在。

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
typedef long long ll;

int n,m,x,y;
int head[N],edge_len;
struct edge {
	int next,to;
	ll w;
} edges[N];
int u[N],v[N],w[N];
bool vis[N];

void Add(int from,int to,ll w) {
	edges[++edge_len].next=head[from];
	edges[edge_len].to=to;
	edges[edge_len].w=w;
	head[from]=edge_len;
}
void Dfs(int e) {
	if(vis[e])
		return;
	vis[e]=true;
	for(int i=head[e]; ~i; i=edges[i].next) {
		if(!vis[edges[i].to])
			Dfs(edges[i].to);
	}
}
bool judge(int t) {
    for(int i=0;i<=n;++i)
        head[i]=-1,vis[i]=false;
	edge_len=0;
	for(int i=0; i<m; ++i) {
		Add(u[i],v[i],w[i]);
		if(w[i]>t)
			continue;
		Add(v[i],u[i],w[i]);
	}
	Dfs(x);
	return vis[y];
}

int main() {
    ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);

	cin>>n>>m>>x>>y;
	for(int i=0; i<m; ++i)
		cin>>u[i]>>v[i]>>w[i];
	int l=0,r=1e9,mid;
	while(l<r) {
		mid=l+r>>1;
		if(judge(mid))
			r=mid;
		else
			l=mid+1;
	}
	cout<<l<<"\n";
	return 0;
}

H (8). Line

贪心的思想,按边的右端点排序,以第一个右端点向右扩大k,找到第一个超出此范围的左端点,并将其右端点作为新的lc

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll n,k,cnt;
struct node {
	ll l,r;
} d[1000001];

bool cmp(node a,node b) {
	return (a.r==b.r)?a.l<b.l:a.r<b.r;
}

int main() {
    ios::sync_with_stdio(false);
	cin.tie(0);

	cin>>n>>k;
	for (int i=0; i<n; i++)
		cin>>d[i].l>>d[i].r;
	sort(d,d+n,cmp);
	ll lr=d[0].r+k;
	for (int i=1; i<n; i++) {
		if(d[i].l<=lr){    
			continue;
        }
		lr=d[i].r+k;
		cnt++;
	}
	cout<<cnt+1;
	return 0;
}

I (9). And / Or

我们知道按位或是不进位加法,a|b\geq a,b 恒成立。

因此只要把每个数进行按位与操作就可以得到最大值

#include<bits/stdc++.h>
using namespace std;

int n,a[100001],ans;

int main() {
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
		ans|=a[i];
	}
	cout<<ans;
	return 0;
}

J (10). Mov

模拟题,没啥好说的

#include<bits/stdc++.h>
using namespace std;

int n;
string s,t;
int a[1000001];

int main() {
	cin>>n;
	while(n--) {
		cin>>s>>t;
		//cout<<t;
		int x=0;
		if(s[0]=='C')
			continue;
		if(s[0]=='M') {
			int i;
			for(i=0; t[i]!=','; i++)
				x=x*10+t[i]-'0';
			if(t[i+1]<'0'||t[i+1]>'9') {
				int y=0;
				for(int j=i+2; j<t.size(); j++)
					y=y*10+t[j]-'0';
				if(t[i+1]=='#')
					a[x]=y;
				if(t[i+1]=='!')
					a[x]=a[y];
				if(t[i+1]=='@')
					a[x]=a[a[y]];
			} else {
				int y=0;
				for(int j=i+1; j<t.size(); j++)
					y=y*10+t[j]-'0';
				a[x]=a[y];
			}
			//cout<<a[x]<<"\n";
		} else {
			int y=0;
			for(int i=0; i<t.size(); i++)
				y=y*10+t[i]-'0';
			cout<<a[y]<<"\n";
		}
	}
	return 0;
}

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

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

相关文章

复现Nature图表:GSEA分析及可视化包装函数

这篇帖子主要的目的是写一个转录组GSEA分析和可视化通用的函数。起因是我们想要复现一篇文章的GSEA可视化图片&#xff0c;这个Nature文章GSEA可视化挺好的&#xff1a; image.png &#xff08;reference&#xff1a;B-cell-specific checkpoint molecules that regulate anti…

vscode报警和报错没有颜色

前言 解决方法来源 https://www.zhihu.com/question/506531863 解决步骤 安装IPython conda install IPython打开/anaconda3/envs/mmagic3/lib/python3.8/site-packages&#xff0c;然后创建一个文件&#xff0c;sitecustomize.py&#xff0c;里面写入 import sys frome IP…

Python(二十一)intput()函数的高级使用

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Kafka消息队列基础入门和实战例子

1、Kafka 1.1 Kafka部署配置 1.1.1 下载Kafka 下载Kafka https://kafka.apache.org/downloads.html https://archive.apache.org/dist/kafka/2.4.1/kafka_2.11-2.4.1.tgz下载Scala-2.11版本 Scala-2.11经典版本解压 直接解压到某个目录&#xff0c;可以一起放在Java相关的…

MathType公式编辑器右边选项变灰

今天在写论文的时候&#xff0c;想要给公式添加编号&#xff0c;发现Word中的MathType好多选项都变灰了&#xff0c;然后查找了一些资料&#xff0c;最终解决&#xff0c;这里记录一下&#xff0c;方便以后查阅。 MathType公式编辑器右边选项变灰 问题描述解决方案禁止MathType…

C++---树形DP---树的中心(每日一道算法2023.7.19)

注意事项&#xff1a; 本题为"树形DP—树的最长路径"的近似题&#xff0c;同时涉及到 单链表模拟邻接表存储图 的操作&#xff0c;建议先理解那篇文章。 题目&#xff1a; 给定一棵树&#xff0c;树中包含 n 个结点&#xff08;编号1~n&#xff09;和 n−1 条无向边…

pandas清洗客户编码异常数据

前言 在不同行业中&#xff0c;我们经常会遇到一个麻烦的问题&#xff1a;数据清洗。尤其是当我们需要处理客户编码异常数据时&#xff0c;这个问题变得尤为重要。想象一下&#xff0c;许多银行都是以客户为单位管理数据的&#xff0c;因此每个客户都有一个独特的编码。在处理…

LiveGBS流媒体平台GB/T28181功能-海康NVR摄像机自带物联网卡摄像头注册GB/T28181国标平台看不到设备的时候如何抓包及排查

海康大华宇视华为等硬件NVR摄像机注册到LiveGBS国标平台看不到设备的时候如何抓包及排查 1、设备注册后查看不到1.1、是否是自带物联网卡的摄像头1.2、关闭萤石云1.3、防火墙排查1.4、端口排查1.5、IP地址排查1.6、设备TCP/IP配置排查1.7、设备多网卡排查1.8、设备接入配置参数…

实战:ELK环境部署并采集springboot项目日志

文章目录 前言技术积累ELK组成及功能框架搭建基础 EIK环境搭建elasticsearch配置相关kibana配置相关logstash配置相关elk目录下增加docker-compose文件查看elk目录文件树编排elk springboot集成logstashpom.xmllogback-spring.xml启动项目logstash采集日志 写在最后 前言 相信…

Java8 stream toMap、groupingBy、mapping的综合应用

文章目录 一、stream toMap、groupingBy、mapping的综合应用1、前提准备①、实体类②、数据准备 2、核心代码&#xff1a;3、运行结果 一、stream toMap、groupingBy、mapping的综合应用 1、前提准备 ①、实体类 package com.cfay.demo;import lombok.AllArgsConstructor; i…

LCD拼接屏、LED显示屏和OLED显示屏的主要区别

我们在生活或工作中经常看到大大小小的显示屏&#xff0c;但很多人却分不清楚这些屏到底属于哪一类&#xff0c;今天sostron与大家一起来分享下关于&#xff1a;LCD拼接屏、LED显示屏、OLED透明屏三者的区别。 LCD拼接屏、LED显示屏和OLED显示屏是不同类型的显示技术&#xff0…

【116个】网络安全测试相关面试真题

1、Burpsuite常用的功能是什么&#xff1f; 2、reverse_tcp和bind_tcp的区别&#xff1f; 3、拿到一个待检测的站或给你一个网站&#xff0c;你觉得应该先做什么&#xff1f; 4、你在渗透测试过程中是如何敏感信息收集的&#xff1f; 5、你平时去哪些网站进行学习、挖漏洞提交到…

这样创建客户帮助中心,效果超好!

创建一个有效的客户帮助中心是为了为客户提供优质的支持和服务。在这个数字化时代&#xff0c;客户期望能够快速找到所需的信息&#xff0c;并得到准确和及时的解答。本文将分享创建有效客户帮助中心的最佳实践&#xff0c;帮助您提供出色的客户体验并提升客户满意度。 1. 了解…

Banana Pi M2 Zero 运行 openHAB 回顾

首先我要透露的是&#xff0c;BPI 的工作人员向我发送了一台免费的 BPi M2 Zero 来执行这些测试。我相信我的评论是公平和公正的&#xff0c;但我想坦率地说明这一事实。 硬件简介 与 Raspberry Pi Zero W 相比&#xff0c;Banana Pi BPI-M2 Zero 具有令人印象深刻的规格。以下…

git进阶操作

一、git 基础概念1. 1.1 三种状态&#xff1a; 工作区&#xff08;unstage&#xff09;——已修改&#xff08;modified&#xff09; 暂存区&#xff08;stage&#xff09;——已暂存&#xff08;staged&#xff09; 对象区——已提交&#xff08;commited&#xff09; 工作…

moment.js常见格式化处理各种时间方法

Moment.js 是一个简单易用的轻量级 JavaScript 日期处理类库,提供了日期格式化、日期解析等功能。它支持在浏览器和 NodeJS 两种环境中运行。此类库能够将给定的任意日期转换成多种不同的格式,具有强大的日期计算功能,同时也内置了能显示多样的日期形式的函数。另外,它也支…

博弈论--sg函数

sg函数------ 定义终止状态的SG函数值为0。如果游戏已经结束&#xff0c;即达到了终止状态&#xff0c;那么对应的SG函数值就是0。即先手的sg值为0&#xff0c;则先手必败&#xff0c;否则先手必胜。 如何求sg函数值--------对于每个可能的移动&#xff0c;将后续状态的SG函数…

「从零入门推荐系统」21:chatGPT、大模型介绍

作者 | gongyouliu 编辑 | gongyouliu 自2022年11月30日OpenAI发布chatGPT以来&#xff0c;大模型技术掀起了新一轮人工智能浪潮。chatGPT在各个领域&#xff08;包括对话、摘要、内容生成、问题解答、识图、数学计算与推理、代码编写等&#xff09;取得了比之前算法好得多的成…

测试开发之路 (工具篇)--Docker

目录 前言 什么是 docker 在 demo 中学习 mysql test link 更复杂点的场景 前言 Docker是一种开源的容器化平台&#xff0c;它可以帮助开发人员和测试人员更轻松地构建、部署和运行应用程序。在测试开发中&#xff0c;Docker可以提供许多便利和优势。 什么是 docker 官…

VMware Cloud Director 10.5 - 领先的云服务交付平台

VMware Cloud Director 10.5 - 领先的云服务交付平台 Support for vSphere 8.0U1 & NSX 4.1 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-cloud-director-10/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.or…