第四届辽宁省大学生程序设计竞赛

比赛经历:2024.5.14简单vp了一个小时只写出了签到题4个然后跑路了

补题:感觉其他题有点太抽象了主要补了一题,在区间问题中数据结构的使用

比赛链接[点我即可]

目录

A.欢迎来到辽宁省赛

B.胜率

F.隔板与水槽

H.取石子

L.区间与绝对值

M.让二追三


A.欢迎来到辽宁省赛

void solve(){cout << 27 << endl;return ;
}

没啥好说的直接输出即可

B.胜率

我们首先看一下是最后答案是四舍五入保留两位小数,可以判断出来答案一定是在10000局可以做到的,同时小数并不好判断我们直接把小数变成整数跑循环暴力找答案即可

// 数学公式要变形
// 莫急莫急先读题
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
#define endl "\n"
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x)   fixed<<setprecision(x)// c++ 保留小数
#define den(a) cout << #a << " = " << a << "\n";
#define deg(a) cout << #a << " = " << a << " ";
typedef long long LL;
typedef pair<int, int> PII;
const int N=1000010,M=10010,INF=0x3f3f3f3f,mod=1e9+7;
const double pai=acos(-1.0);// pai
map<int,int> mp;
int t,n,m;
const double esp = 1e-3;
void solve(){int pos = M;double res; cin>>res;int t = res * 100;for(int i=0;i<M;i++){for(int j=1;j<M;j++){double now = 1.0*i/j*100;now += 0.005;int yes = now*100;if(yes==t){pos = min(pos,j);}}}cout << pos << endl;return ;
}
signed main ()
{ios// 不能有printf puts scanfint t=1;while(t--){solve();}
}

F.隔板与水槽

我们观察数据范围可以发现应该在n^2级别,同时左右是独立的,所以我们可以枚举中间位置去记录其左右最大值即可

LL a[N];
LL L[N],R[N];void solve(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=2;i<=n;i++){for(int j=1;j<i;j++){L[i]=max(L[i],min(a[i],a[j])*(i-j));}}for(int i=n-1;i>=1;i--){for(int j=n;j>i;j--){R[i]=max(R[i],min(a[i],a[j])*(j-i));}}LL ans = 0;for(int i=2;i<n;i++) ans = max(ans,L[i]+R[i]);cout << ans << endl;return ;
}

H.取石子

我们通过对式子分析可以得出,无论如何选择,两个人能取出的石头都是奇数个数,那么结果就之和给出的奇偶有关系了,简单做个判断即可

void solve(){int a,b,n; cin>>a>>b>>n;cout << (n&1? "Alice" : "Bob") << endl;return ;
}

L.区间与绝对值

对于区间问题我们如果有式子可以简单推理一下,由式子得到就是区间中的每一个数互相做减法的绝对值之和,我们看一下对于一个区间如何计算贡献,不妨这样想如果我把右端点加一个数如何计算新的区间贡献,可以发现新来的数带来的贡献为2*(a_{new} *cnt_{[l,r](a_i<a_{new})} - sum_{[l,r](ai<a_{new})}) 

int g[N],a[N];
LL tr[N][2],res[N],ans;
struct code{int l,r,id;bool operator<(const code&t)const{return g[l]==g[t.l] ?  r<t.r : l < t.l;}
}Q[N];
void add(int op,int k,int x){for(int i=k;i<N;i+=lowbit(i)) tr[i][op]+=x;
}
LL query(int op,int k){LL res = 0;for(int i=k;i;i-=lowbit(i)) res += tr[i][op];return res;
}
void add(int x){x = a[x];ans += query(0,x-1)*x - query(1,x-1);ans += (query(1,N-1)-query(1,x)) - (query(0,N-1)-query(0,x))*x;add(0,x,1);add(1,x,x);
}
void del(int x){x = a[x];ans -= query(0,x-1)*x - query(1,x-1);ans -= (query(1,N-1)-query(1,x)) - (query(0,N-1)-query(0,x))*x;add(0,x,-1);add(1,x,-x);
}
void solve(){cin>>n>>m;int block = sqrt(n);for(int i=1;i<=n;i++){cin>>a[i];g[i]=(i-1)/block+1;}for(int i=1;i<=m;i++){int l,r; cin>>l>>r;Q[i]={l,r,i};}sort(Q+1,Q+1+m);int L = 1 ,R = 0;for(int i=1;i<=m;i++){auto [l,r,id]=Q[i];while(L<l) del(L++);while(L>l) add(--L);while(R>r) del(R--);while(R<r) add(++R);res[id]=2*ans;}for(int i=1;i<=m;i++) cout << res[i] << endl;return ;
}

这样的话我们可以发现实际上维护的就是区间中小于这个数的数量,和小于这个数的和,可以知道树状数组就具有这个功能,但是对于多个区间如何操作,我们可以看到时间是4s,那么对于多个区间问题我们可以考虑使用莫队算法来优化本题

最后时间复杂度就是n\sqrt{n}*log(N)

M.让二追三

概率可以直接按照一次比赛打五次直接算出来,但是注意的是在n个比赛中,那么当n<5时是无解的,大于5的时候有n-4个符合题意的可以

LL qmi(LL a,LL b,LL p){LL res = 1;while(b){if(b&1) res=res*a%p;b>>=1;a=a*a%p;}return res;
}
LL inv(LL x){return qmi(x,mod-2,mod);
}
void solve(){int a,b,n; cin>>a>>b>>n;if(n<5){cout << 0 << endl;return ;}LL fm = qmi(b,5,mod);LL fz = qmi(b-a,2,mod)*qmi(a,3,mod)%mod;LL ans = fz%mod*inv(fm)%mod*(n-4)%mod; // 每次发生的概率是一样的// 就是cout << ans << endl;return ;
}

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

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

相关文章

如何给扫描好的3d模型贴图?---模大狮模型网

在数字化设计领域&#xff0c;3D模型的贴图是提升模型逼真度和视觉效果的重要步骤之一。尤其是对于扫描好的3D模型&#xff0c;通过添加适当的贴图&#xff0c;不仅可以增强模型的细节和真实感&#xff0c;还可以为设计带来更加生动的视觉体验。本文将为您详细介绍如何给扫描好…

Node.js 学习笔记 express框架

express express 使用express下载express 初体验 express 路由什么是路由1路由的使用验证的方法 2获取请求报文参数3获取路由参数4响应设置响应报文 express 中间件5中间件全局中间件路由中间件 6静态资源中间件注意事项案例 7请求体数据8防盗链实现防盗链 9路由模块化router E…

Windows里使用ollama本地大模型部署

下载 ollama官网进行下载 下载完后下一步下一步即可 安装完成后验证是否成功&#xff0c;打开命令行输入ollama&#xff0c;有该指令即安装成功 环境变量配置 配置模型下载位置 看自己电脑硬盘情况配置 打开所有ip接口访问权限 如果想要远程调用ollama接口&#xff0c;…

怎么保护云服务器的安全

在云计算技术迅速发展的今天&#xff0c;云服务器被广泛使用&#xff0c;云服务器已经成为企业、组织和个人不可或缺的重要基础设施。然而&#xff0c;云服务器的普及也伴随着日益严峻的安全挑战。今天德迅云安全就和大家了解云服务器安全的重要性&#xff0c;并分享一些常见的…

3ds Max与Maya不同之处?两者哪个更适合云渲染?

3ds Max 和 Maya 都是知名的3D软件&#xff0c;各有其特色。3ds Max 以直观的建模和丰富的插件生态闻名&#xff1b;Maya 则在动画和角色创作方面更为出色。两者都支持云渲染技术&#xff0c;能帮助用户在云端高效完成项目。 一、3ds Max和Maya之间的主要区别&#xff1a; 3ds…

【初阶数据结构】单链表基础OJ题讲解

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL。 &#x1f4da;本文收录与初阶数据结构系列&#xff0c;本专栏主要是针对时间、空间复杂度&#xff0c;顺序表和链表、栈和队列、二叉树以及各类排序算法&#xff0c;持…

【大道至简】官方兼容到android13+的获取系统屏幕高度, statusbar,navBar

android在屏幕高度和app高度&#xff0c;statusbar, navigationbar的高度处理上&#xff0c;迭代了好多版本。 android11&#xff0c; android12都有新的api和过时的api标记。 涉及的api类似如下&#xff1a; windowManager&#xff0c;defaultDisplay, Context.display, Deco…

分布式光伏监控系统功能模块详解

目前&#xff0c;分布式光伏发电系统的总容量比较小&#xff0c;并且光伏电站的功率受外界环境影响容易出现大起大落的现象。这使电压调整变得很困难。光伏电站运行维护人员不足&#xff0c;长时间不保养维护会影响光伏电站的发电效率。针对上述问题&#xff0c;鹧鸪云基于无线…

RK3588 camera驱动总结一

RK3588的硬件能力 ISP和VICAP的链接关系&#xff1a; VICAP和ISP是独立的两个图像处理IP, VICAP所采集图像若要通过ISP处理&#xff0c;在驱动层面需要生成VICAP对应接口的v4l2 sub device链接到ISP对应的节点&#xff0c;以提供参数给ISP驱动使用。 1.RKISP 驱动 RKISP驱动主…

java内容快速回顾+SSM+SpringBoot简要概述

文章目录 java基础知识基本知识列表面对对象堆与栈的关系值修改与引用修改异常&#xff1a;错误异常 SSMspringMVCServletSpringMVC&#xff1a;基于 Servlet的 Spring Web 框架&#xff0c; spring控制反转 IoC(Inversion of Control)面向切面 Aop MybatisJDBCMybatis SpringB…

C++ QT设计模式 (第二版)

第3章 Qt简介 3.2 Qt核心模块 Qt是一个大库&#xff0c;由数个较小的库或者模块组成&#xff0c;最为常见的如下&#xff1a;core、gui、xml、sql、phonon、webkit&#xff0c;除了core和gui&#xff0c;这些模块都需要在qmake的工程文件中启用 QTextStream 流&#xff0c;Qdat…

深入了解 npm:Node.js 包管理工具详解

文章目录 一、npm 基本概念1.1 什么是 npm&#xff1f;1.2 package.json 文件 二、npm 常用命令2.1 初始化项目2.2 安装依赖2.2.1 安装单个包2.2.2 全局安装包2.2.3 安装开发依赖 2.3 移除依赖2.4 更新依赖2.5 查看已安装的包2.6 发布包 三、npm 高级用法3.1 使用 npm scripts3…