首师大附中集训第二天专题测试

2023-10-31 05:40

本文主要是介绍首师大附中集训第二天专题测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

专题测试

      第一题:有一个序列a[0-n+1],给出序列D满足对于0<i<n+1a[i]=\frac{a[i-1]+a[i+1]}{2}-d[i],现在已知a[0],a[n+1],要你求a[1]

      我一开始做的就是推式子,然后发现我推出来的垃圾式子只能做n=2^k-1的情况。后来想了想,这个里面没有二次项,所以a[n+1]=ka[1]+b,所以就直接二分a[1]的值,然后根据di算出来a[n+1]的值,又因为成比例变化,所以就可以直接二分了。

      唯一要注意的一点就是一开始先算一算a[1],a[n+1]是正相关还是负相关。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;int n;
double a1,a2,l,r,d[3010];
const double eps=1e-5;double get_last(double x){double last=a1,temp;for(int i=1;i<=n;i++) temp=x,x=2*d[i]-last+2*x,last=temp;return x;
}int main(){freopen("math.in","r",stdin);freopen("math.out","w",stdout);scanf("%d",&n);scanf("%lf %lf",&a1,&a2);for(int i=1;i<=n;i++) scanf("%lf",&d[i]);l=-1000,r=1000;double begin=get_last(l),end=get_last(r);while(r-l>eps){double mid=(l+r)/2;if(begin+eps<end){if(get_last(mid)+eps<a2) l=mid;else r=mid;}else{if(get_last(mid)-eps>a2) l=mid;else r=mid;}}printf("%.2lf",l);
}

      第二题:给出2^n个人,每个人的实力值等于它的编号。A与B比赛,当A的实力值与B的实力值相差不超过k时,A可能获胜。当A的实力值小于B的实力值-k时,A必定获胜,问安排一种方案,每轮两两比赛,问n轮后最大可能获胜的编号的是多少。

      这题稍微想一想就知道了,首先可以二分,其次我们可以贪心从根节点往下bfs,每次将一个点生出两个儿子,一个儿子是它自己,一个儿子取第一个>=自己的编号-k的数。然后放进队列。如果找不到这样的数字,那么就不成立。

      这样正确性显然,因为这样可以使得在较浅层数的编号有更多编号选择,可以证明若这种方案都不行的话其他方案肯定不行。

      

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;int n,k,c;
struct node{int x,size,c;
};
queue<node> f;
bool tf[4110];bool check(int x){memset(tf,false,sizeof(tf));while(!f.empty()) f.pop();f.push((node){x,n,c});tf[x]=true;int next;while(!f.empty()){node now=f.front();now.size/=2;now.c--;f.pop();if(now.c) f.push(now);next=0;for(int i=max(1,now.x-k);i<=n;i++) if(!tf[i]){next=i;break;}if(!next) return false;now.x=next;tf[next]=true;if(now.c) f.push(now);}return true;
}int main(){freopen("contest.in","r",stdin);freopen("contest.out","w",stdout);scanf("%d %d",&n,&k);int temp=n;while(temp!=1) c++,temp/=2;int l=1,r=min(n,n+k-c),ans=0;while(l<=r){int mid=(l+r)/2;if(check(mid)) l=(ans=mid)+1;else r=mid-1;}printf("%d",ans);
}

      第三题:给出一个长度为2n-1的一个序列,现在进行n-1次操作,每次操作把原来的序列的每个位置上的数变成相邻位置与本身三个数的中位数,问最后最中间的数是多少。

      这题好难。

      首先一个貌似非常套路的方法就是二分最后最中间的数是多少。接着我们可以把>=该数的数变为1,<该数的变为0.

      我们发现最后的答案就等于从最中间往两边走第一个出现的连续1/0。

      考虑画图证明即可。这个结论很显然但是很难发现。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;int n,m;
int a[200010],temp[200010];
bool tf[200010];
int l=2e9,r=0;bool check(int x){for(int i=1;i<=m;i++) if(a[i]>=x) temp[i]=1;else temp[i]=0;int tot=0,now,t1,t2,w1,w2;memset(tf,false,sizeof(tf));if(temp[1]==temp[2]) tf[1]=true;tot=1;for(int i=2;i<=m;i++){tf[i]=true;if(temp[i]==temp[i-1]) tot++;else {if(tot==1) tf[i-1]=false;tot=1;}}if(tf[n]) return temp[n]; t1=t2=0;now=n-1;w1=w2=temp[n];while(tf[now]==false && now>=1) t1++,now--,w1=temp[now];if(now!=0) w1=temp[now];now=n+1;while(tf[now]==false && now<=m) t2++,now++,w2=temp[now];if(now!=m+1) w2=temp[now];if(t1<t2) return w1;else return w2;
}int main(){freopen("3.in","r",stdin);scanf("%d",&n);m=2*n-1;for(int i=1;i<=m;i++) scanf("%d",&a[i]),l=min(l,a[i]),r=max(r,a[i]);int ans=0;while(l<=r){int mid=(l+r)/2;if(check(mid)) l=(ans=mid)+1;else r=mid-1;}printf("%d\n",ans);
}

这篇关于首师大附中集训第二天专题测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/313212

相关文章

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

Java基础回顾系列-第二天-面向对象编程

面向对象编程 Java类核心开发结构面向对象封装继承多态 抽象类abstract接口interface抽象类与接口的区别深入分析类与对象内存分析 继承extends重写(Override)与重载(Overload)重写(Override)重载(Overload)重写与重载之间的区别总结 this关键字static关键字static变量static方法static代码块 代码块String类特

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和==target,首先想到的就是暴力解法 1)暴力: 2)优化,滑动窗口: 1.进窗口 2.出窗口 3.更新值 2.⽆重复字符的最⻓⼦串(medium) 1)仍然是暴力解法: 2)优化: 进窗口:hash[s[rig