篮球杯软件赛国赛C/C++ 大学 B 组补题

3.gcd 模拟

在这里插入图片描述

map<pair<int,int>,int>m;
void solve(){int n;cin>>n;forr(i,1,n){int ux,uy,vx,vy;cin>>ux>>uy>>vx>>vy;int dx=vx-ux,dy=vy-uy;if(dx!=0&&dy!=0){int g=abs(__gcd(dx,dy));dx/=g,dy/=g;//dxdy中除去公共部分(gcd) 就是相邻整数点的横纵距离int nx=ux,ny=uy;while (nx!=vx&&ny!=vy){m[{nx,ny}]++;nx+=dx,ny+=dy;}m[{vx,vy}]++;}else if(dx==0){//处理g=0的情况forr(i,min(uy,vy),max(uy,vy)){m[{ux,i}]++;}}else if(dy==0){forr(i,min(ux,vx),max(ux,vx)){m[{i,uy}]++;}}}int ans=0;for(auto i:m){if(i.second>1){ans++;}}cout<<ans<<endl;
}

4. 二分查找

简单的二分查找板子,但是需要注意check函数的细节
在这里插入图片描述

void solve(){int n,m;cin>>n>>m;vector<int>a(n+1);int mnd=1e8+10;forr(i,1,n){cin>>a[i];mnd=min(a[i],mnd);}auto check=[&](int x)->bool{int pre=0,cnt=0,fg=0;forr(i,1,n){int dis=a[i]-pre;if(dis>x){//注意中间添加检查点的个数if(dis%x==0)cnt+=dis/x-1;else cnt+=dis/x;}pre=a[i];}return cnt<=m+1;//爆发技能就相当于多加一个检查点};int l=1,r=1e8+10;while (l<r){int mid=(l+r)>>1;if(check(mid))r=mid;else l=mid+1;}cout<<r<<endl;
}

5.贪心

贪心,每次往前放最小的 新添加的要放在原字符串中更大的字母的前面

void solve(){int n,m;cin>>n>>m;string s,c;cin>>s>>c;sort(c.begin(),c.end());int i,j;string ans;for(i=0,j=0;i<n&&j<m;){if(s[i]<=c[j])ans+=s[i++];else ans+=c[j++];}while (i<n)ans+=s[i++];while (j<m)ans+=c[j++];cout<<ans<<endl;
}

6. dp

数据量不大 1e6 三维dp [数组元素][已经用了多少反转区间][本元素是否反转]
逆转贡献时间复杂度不大 1 e 9 ≈ 2 30 1e9≈2^{30} 1e9230

const int N=1e3+10;
int twos[35];
int rev(int x){int ans=0,pre=x;stack<bool>b;while (x){b.push(x&1);x>>=1;}int i=0;while (!b.empty()){ans+=b.top()*twos[i++];b.pop();}// cout<<ans<<' ';// cout<<ans-pre<<endl;return ans-pre;
}
int dp[N][N][2];
void solve(){twos[0]=1;forr(i,1,31)twos[i]=twos[i-1]*2;int n,m;cin>>n>>m;vector<int>a(n+1),b(n+1);int sum=0;forr(i,1,n){cin>>a[i];sum+=a[i];b[i]=rev(a[i]);//逆转后的贡献}forr(i,1,n){forr(j,1,m){dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]);//不用反转dp[i][j][1]=max(dp[i-1][j][1],dp[i-1][j-1][0])+b[i];//反转  //如果上一个没转,本次新开反转区间 //如果上一个反转了,延续上个区间}}// cout<<sum<<endl;cout<<max(dp[n][m][0],dp[n][m][1])+sum<<endl;
}

7.贪心 滑动窗口

注意平面是第一象限[0,1e8]的正方形

贪心(纵):最优情况是以每个圆的下边界为底往上+h
滑动窗口(横):排序 滑动窗口找长度为w的区间 能包含的圆最多
在这里插入图片描述

struct cir{int x,y,r;
};
//贪心思想(纵)+滑动窗口(横)
void solve(){int n,w,h;cin>>n>>w>>h;vector<cir>a(n+1);vector<int>yl;forr(i,1,n){cin>>a[i].x>>a[i].y>>a[i].r;yl.push_back(a[i].y-a[i].r);//贪心 最优情况是以每个圆的下边界为底}sort(a.begin()+1,a.end(),[](cir cx,cir cy){return cx.x+cx.r<cy.x+cy.r;});//从小到大 右端排序int ans=0;//在纵向区间内,枚举横边,计数auto cnt=[&](int w,int h,int cury)->void{priority_queue<int,vector<int>,greater<int>>q;//小根堆 顶上是最左边的边forr(i,1,n){if(a[i].y-a[i].r>=cury&&a[i].y+a[i].r<=cury+h){//如果在纵坐标h的区间内q.push(a[i].x-a[i].r);while (!q.empty()&&a[i].x+a[i].r-q.top()>w)q.pop();//滑动窗口 优先队列维护横坐标ans=max(ans,(int)q.size());}}};forr(i,1,n){cnt(w,h,yl[i]);cnt(h,w,yl[i]);}cout<<ans<<endl;
}

8.递推

借鉴(抄袭)了dalao的思路

  • 每个位置都有两种跳法 2 i 2i 2i i + c i i+c_i i+ci
  • 就像二叉树的结构,从叶子往根递推,记录哪个位置当根set.size()最大
  • 问的是“可能经过的”,所以 2 i 2i 2i i + c i i+c_i i+ci能跳则权值放入set
  • 数据很水,用set也能过,感觉是 n 2 n^2 n2的复杂度;dalao的题解中用bitset取或运算代替set.insert记录权值,很快
const int N=4e4+5,M=130;
set<int>s[N];void solve(){int n;cin>>n;vector<int>a(n+1);forr(i,1,n)cin>>a[i];int ans=0;reforr(i,1,n){s[i].insert(a[i]);if(a[i]+i<=n){for(auto j:s[i+a[i]])s[i].insert(j);}if(2*i<=n){for(auto j:s[i*2])s[i].insert(j);}ans=max(ans,(int)s[i].size());}cout<<ans<<endl;
}

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

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

相关文章

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…

Linux边缘智能:物联网的终极进化

Linux边缘智能&#xff1a;物联网的终极进化 从数据中心到万物终端的智能革命 引言&#xff1a;边缘计算的范式转变 随着物联网设备的爆炸式增长&#xff0c;传统的云计算架构已无法满足实时性、隐私保护和带宽效率的需求。边缘智能应运而生&#xff0c;将计算能力从云端下沉到…

Linux Shell 中的 dash 符号 “-”

Shell中的-&#xff1a;小符号的大智慧 在Unix/Linux系统中&#xff0c;-符号是一个约定俗成的特殊标记&#xff0c;它表示命令应该使用标准输入或标准输出而非文件。这个看似简单的短横线&#xff0c;完美诠释了Unix"一切皆文件"的设计哲学。 作为标准输入/输出的…

JMeter 实现 MQTT 协议压力测试 !

想象一下&#xff0c;你的智能家居系统连接了上千个设备&#xff0c;传感器数据通过 MQTT 协议飞速传输&#xff0c;但突然服务器崩溃&#xff0c;灯光、空调全失控&#xff01;如何确保你的 MQTT 经纪人能承受高负载&#xff1f;答案是 JMeter&#xff01;通过安装 MQTT 插件&…

CKA考试知识点分享(6)---PriorityClass

CKA 版本&#xff1a;1.32 第六套题是涉及PriorityClass相关。 注意&#xff1a;本文不是题目&#xff0c;只是为了学习相关知识点做的实验。仅供参考 实验目的 创建一套PriorityClass &#xff0c;验证PriorityClass的运作策略。 1 环境准备 创建2个pc&#xff0c;一个为高…

暴力破解篇补充-字典

在皮卡丘靶场的第二期&#xff0c;暴力破解模块中&#xff0c;我相信大家短暂的接触了字典这个概念&#xff0c;字典事实上就是包含了大量弱口令的txt文本文件 所以这篇文章用于分享一些字典&#xff1a;https://wwhc.lanzoue.com/ihdl12ybhbhi&#xff08;弱口令字典&#xff…

关于VS2022中C++导入第三方库的方式

首先&#xff0c;新建一个Cpp项目(控制台项目即可&#xff0c;其他项目也无所谓)&#xff0c;右键点击项目名称(Test1)选择属性或者在VS2022工具栏选择调试标签->属性按钮打开属性页。 注意点: 在开始其他操作前请注意先进行 配置和平台选项框的选择。配置选框选定了是配置…

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…

在Vue或React项目中使用Tailwind CSS实现暗黑模式切换:从系统适配到手动控制

在现代Web开发中&#xff0c;暗黑模式(Dark Mode)已成为提升用户体验的重要功能。本文将带你使用Tailwind CSS在React项目(Vue项目类似)中实现两种暗黑模式控制方式&#xff1a; 系统自动适配 - 根据用户设备偏好自动切换手动切换 - 通过按钮让用户自由选择 一、项目准备 使…

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…

Tomcat 安装和配置

一、Tomcat官网 Apache Tomcat - Welcome! 选择解压到任意一个盘&#xff01;&#xff01; 二、Tomcat配置 1&#xff09;在系统变量处新建一个变量CATALINA_HOME。CATALINA_HOME环境变量的值&#xff0c;设置为Tomcat的解压安装目录 2&#xff09;找到系统变量Path&#xff0…

动态规划 熟悉30题 ---上

本来是要写那个二维动态规划嘛&#xff0c;但是我今天在问题时候&#xff0c;一个大佬就把他初一时候教练让他练dp的30题发出来了&#xff08;初一&#xff0c;啊虽然知道计算机这一专业&#xff0c;很多人从小就学了&#xff0c;但是我每次看到一些大佬从小学还是会很羡慕吧或…

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;成品使用演示、项目源码、项目文档在文章末尾网盘链接中自取 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …

时间同步技术在电力系统中的应用

随着电力自动化技术的发展&#xff0c;时间同步不仅可以为电力系统的事后故障分析提供支持&#xff0c;而且已经参与到电力系统的实时控制中来&#xff0c;其可靠性对电力系统的稳定运行影响越来越大。在电力系统中&#xff0c;时间同步技术广泛应用于调度控制中心、发电厂、变…

XMLGregorianCalendar跟Date、localDateTime以及String有什么区别

1. java.util.Date&#xff08;已过时&#xff0c;不推荐新代码使用&#xff09; 特点 表示时间戳&#xff1a;存储自 1970-01-01 00:00:00 UTC&#xff08;Unix 纪元&#xff09; 以来的毫秒数。 问题&#xff1a; 不区分日期和时间&#xff0c;也没有时区支持&#xff08;依…

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…

玩转抖音矩阵:核心玩法与高效运营规则

一、 抖音矩阵&#xff1a;流量协同的生态网络 抖音矩阵&#xff0c;本质是运营一个相互关联、互相支持的抖音账号群。核心目标在于通过账号间的深度协同&#xff08;内容、流量、粉丝&#xff09;&#xff0c;打破单个账号的流量天花板&#xff0c;实现11>2的效果。它不仅…

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…

用电脑通过USB总线连接控制keysight示波器

通过USB总线控制示波器的优势 在上篇文章我介绍了如何通过网线远程连接keysight示波器&#xff0c;如果连接的距离不是很远&#xff0c;也可以通过USB线将示波器与电脑连接起来&#xff0c;实现对示波器的控制和截图。 在KEYSIGHT示波器DSOX1204A的后端&#xff0c;除了有网口…