题解|2024暑期杭电多校01

【原文链接】

1001.循环位移

字符串

题目大意

给定两个字符串 A , B A,B A,B
定义 [ A ] [A] [A] 为字符串 A A A 的循环位移任意次可以得到的所有字符串的集合。
B B B 包含 [ A ] [A] [A] 中元素的个数。

解题思路

利用字符串Hash快速匹配。
[ A ] [A] [A] 中所有元素的Hash记录到一个set:计算 A + A A+A A+A 的Hash前缀和,以快速得到所有长度为 ∣ A ∣ |A| A 的子串的Hash值,并加入set中。
枚举 B B B 的所有长度为 ∣ A ∣ |A| A 的子串,计算Hash值,判断是否在set中,计数。

参考程序

void solve()
{string a,b;cin >> a >> b;ll n=a.length(),m=b.length();set<pll> st;strHash sa(a+a);FORLL(i,1,n)st.insert(sa.findz(i,i+n-1));strHash sb(b);ll ans = 0 ;FORLL(i,1,m-n+1)if(st.count(sb.findz(i,i+n-1))) ans++;cout << ans << endl;
}

1002.星星

背包DP

题目大意

小A要进行n次选择,每次可以选择一项:

  1. 不执行操作
  2. 付出 a i a_i ai点代价得到1颗星星
  3. 付出 b i b_i bi点代价得到2颗星星
  4. 付出 c i c_i ci点代价得到3颗星星
  5. 付出 d i d_i di点代价得到4颗星星

求恰好得到 k k k颗星星的最小代价。

解题思路

一眼顶针鉴定为背包DP的分组背包问题。

d p x dp_x dpx表示选x个物品的最低cost。
在第 i i i组时,从大到小遍历作出选择后有 j j j个星星。
遍历这一步的选择( l l l 个星星),从 d p j − l dp_{j-l} dpjl 更新到 d p j dp_j dpj ,这样更新保证了一次操作只生效一项。

参考程序

void solve()
{ll n,k;cin >> n >> k;vector<array<ll,5>> cost(n,{0,0,0,0,0});vector<ll> dp(k+1,INF); dp[0]=0; //选i个物品的最低costFORLL(i,0,n-1) cin >> cost[i][1] >> cost[i][2] >> cost[i][3] >> cost[i][4];FORLL(i,0,n-1){ //第i步FORLL_rev(j,k,1){ //选择后的个数FORLL(l,0,4){ //这一步选择l个if(j-l>=0) chmin(dp[j],dp[j-l]+cost[i][l]);}}}cout << dp[k] << endl;
}

1008.位运算

题目大意

给定整数 n , k n,k n,k,求满足 ( ( a ⊗ b ) ⊕ c ) ⊖ d = n ((a\otimes b)\oplus c)\ominus d=n ((ab)c)d=n 的四元组 ( a , b , c , d ) , 0 ≤ a , b , c , d < 2 k (a,b,c,d),0\le a,b,c,d\lt 2^k (a,b,c,d)0a,b,c,d<2k 的个数。

其中, ⊗ \otimes 表示按位与, ⊕ \oplus 表示按位异或, ⊖ \ominus 表示按位或。

解题思路

转为二进制,按位考虑。

n n n 的某一位上是 0 0 0 d d d 在这一位上必须为 0 0 0 c c c 在这一位上由 a , b a,b a,b 决定(控制这一位为 0 0 0), a , b a,b a,b 在这一位上任选,即 1 ∗ 1 ∗ 2 ∗ 2 = 4 1*1*2*2=4 1122=4 种可能。

n n n 的某一位上是 1 1 1

  1. d d d 在这一位上为 0 0 0 ,则 c c c 在这一位上由 a , b a,b a,b 决定(控制这一位为 1 1 1), a , b a,b a,b 在这一位上任选,即 1 ∗ 1 ∗ 2 ∗ 2 = 4 1*1*2*2=4 1122=4 种可能。
  2. d d d 在这一位上为 1 1 1 ,则 a , b , c a,b,c a,b,c 在这一位上任选,即 1 ∗ 2 ∗ 2 ∗ 2 = 8 1*2*2*2=8 1222=8 种可能。

综上, n n n 的一位上是 1 1 1 时有 12 12 12 种可能,是 0 0 0 时有 4 4 4 种可能。

答案为 4 k × 3 c n t 1 4^k\times 3^{cnt1} 4k×3cnt1

参考程序

void solve()
{ll n,k;cin >> n >> k;ll cnt1=0;while(n){if(n%2) cnt1++;n/=2;}cout << qcpow(2,k*2)*qcpow(3,cnt1) << endl;
}

1012.并

题目大意

给定 n n n 个矩形,对 k = 1 → n k=1\to n k=1n 分别求随机取 k k k 个矩形的面积并的期望。

解题思路

平面可以被矩形边界分割成若干个小区域,考虑每个区域对答案的贡献。

因为要求期望,被“相同数量矩形覆盖”的小区域 对答案的贡献是相同的,因此按照 覆盖矩形数量 将这些小区域分组,统计出恰好被 i i i 个矩形覆盖的区域的面积 S i S_i Si

我的求法就是从左到右扫描,在每条竖线的位置,更新 i i i 个矩形覆盖的y轴长度 y v a l i yval_i yvali ,到下一条竖线再乘经过的x轴长度,得到这一部分的面积(类似于积分?),加入 S i S_i Si

然后考虑贡献的权重。
n n n 个矩形中随机选取 k k k 个,对于被 i i i 个矩形覆盖的区域,只要选取的 k k k 个矩形中,存在这 i i i 个矩形之一,那么这个面积就会被计入。
在上述条件下的贡献权重是 v a l k , i = C n k − C n − i k C n k val_{k,i}=\dfrac{C_{n}^{k}-C_{n-i}^{k}}{C_{n}^{k}} valk,i=CnkCnkCnik ,即从 n n n 个矩形中选取 k k k 个方案数,减去从 n − i n-i ni 个矩形中选取 k k k 个方案数。

最后答案 a n s k ans_k ansk ∑ i = 1 n v a l k , i × S i \sum\limits_{i=1}^{n}val_{k,i}\times S_i i=1nvalk,i×Si

参考程序

void prepare(){Prepare_Combination(5005);MOD = 998244353;
}
ll getval(ll n,ll i,ll j){ll ret=C[n][i],sb;if(i>n-j) sb=0;else sb = C[n-j][i];return sub(ret,sb);
}
void solve()
{ll n;cin >> n;ll xx1,xx2,yy1,yy2;vector<tuple<ll,ll,ll,ll>> xlines;vector<ll> ylines;// xline:(y,x1,x2,flag) # 横线 flag:0上边界1下边界// yline:(x) # 竖线x坐标FORLL(i,1,n){cin >> xx1 >> yy1 >> xx2 >> yy2;xlines.emplace_back(yy1,xx1,xx2,0);xlines.emplace_back(yy2,xx1,xx2,1);ylines.emplace_back(xx1);ylines.emplace_back(xx2);}SORT(xlines); SORT(ylines);map<ll,ll> S,yval;ll prex=0;// S[i]:重叠i次部分的面积for(auto xx:ylines){ll difx = xx-prex;for(auto [pl,val]:yval){// S[pl]+=difx*val;addto(S[pl],mul(difx,val));}yval.clear();ll cur = 0, prey = 0;for(auto [yy,xx1,xx2,flag]:xlines){if(xx1<=xx&&xx<xx2){yval[cur]+=yy-prey;if(flag==0) cur++;else cur--;prey=yy;}}prex = xx;}// for(auto x:S) cout << x.first << ' ' << x.second << endl;FORLL(i,1,n){ll ans = 0;FORLL(j,1,n){ll val = getval(n,i,j);ans = add(ans,mul(val,S[j]));}divto(ans,C[n][i]);cout << ans << endl;}
}

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

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

相关文章

switch可应用于哪些数据类型说说java中的数组和多维数组

switch可以用于哪些数据类型&#xff1f; switch是一种条件控制语句&#xff0c;根据不同的条件执行不同的代码块。switch使用一个或者多个不同的值来匹配某个表达式的值&#xff0c;并且根据结果来匹配不同的值。switch的语句基本格式 switch&#xff08;expression&#xf…

Web安全:未验证的重定向和转发.

Web安全&#xff1a;未验证的重定向和转发. 未验证的重定向和转发漏洞是一种常见的Web安全漏洞&#xff0c;它允许攻击者将用户重定向到一个恶意的URL&#xff0c;而不是预期的安全URL。这种漏洞通常发生在应用程序处理重定向和转发请求时&#xff0c;未能对目标URL进行适当的…

探索 PDF 转 Markdown 的项目:MinerU 和 pdfParser

pdfParser 项目是在MinerU 项目 的基础上开发的&#xff0c;增加了表格识别功能 MinerU&#xff1a;综合数据提取工具 MinerU 项目 是一款一站式、开源、高质量的数据提取工具&#xff0c;支持 PDF、网页和电子书的提取。其 Magic-PDF 模块可以将 PDF 转换为 Markdown 格式&a…

display: flex 和 justify-content: center 强大居中

你还在为居中而烦恼吗&#xff0c;水平居中多个元素、创建响应式布局、垂直和水平同时居中内容。它&#xff0c;display: flex 和 justify-content: center 都可以完成&#xff01; display: flex&#xff1a;将元素定义为flex容器 justify-content&#xff1a;定义项目在主轴…

el-popover嵌套select弹窗点击实现自定义关闭

需求 el-popover弹窗内嵌套下拉选择框&#xff0c;点击el-popover弹出外部区域需关闭弹窗&#xff0c;点击查询、重置需关闭弹窗&#xff0c; 实现 根据需求要自定义弹窗的关闭和显示&#xff0c;首先想到的是visible属性&#xff0c;在实现过程中经过反复的测验&#xff0…

区块链技术实现数字电网内数据可信共享 |《超话区块链》直播预告

随着全球电力市场朝着构建“SmartGrid”和“IntelliGrid”的目标发展&#xff0c;国内电力公司也提出了构建“数字电网”的愿景。清大科越推出新型电力系统区块链服务平台&#xff0c;通过便捷的建链、上链、用链及治链能力&#xff0c;有效解决数字电网各主体间数据共享的信任…

为什么要从C语言开始编程

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;很多小伙伴在入门编程时。都…

docker的学习(一):docker的基本概念和命令

简介 docker的学习&#xff0c;基本概念&#xff0c;以及镜像命令和容器命令的使用 docker docker的基本概念 一次镜像&#xff0c;处处运行。 在部署程序的过程中&#xff0c;往往是很繁琐的&#xff0c;要保证运行的环境&#xff0c;软件的版本&#xff0c;配置文件&…

机器学习中的数据分析

数据分析是一个涉及收集、清洗、转换、建模和解释数据的过程&#xff0c;目的是揭示模式、趋势和结论&#xff0c;以支持决策制定。以下是一个简化版的数据分析教程&#xff0c;分为几个关键步骤&#xff1a; 1. 定义问题 明确你希望通过数据分析解决的问题。这可能涉及到商业…

安装 Maven

安装 Maven 的步骤&#xff1a; 1. 访问 Maven 官方网站: https://maven.apache.org/download.cgi 2. 下载 Maven 的二进制文件 3. 解压下载的文件到希望安装的目录 4. 将 Maven 的 bin 目录添加到您的系统环境变量 PATH 中&#xff08;配置环境变量&#xff09; 这个步骤可…

Jupyter notebook如何快速的插入一张图片?如何控制插入图片的缩放、靠左展示(ChatGPT)

在Jupyter Notebook中&#xff0c;你可以使用Markdown语法快速插入图片&#xff0c;并且可以通过HTML标签来控制图片的展示方式和缩放。 注意&#xff1a;以下所有操作都有一个前提&#xff0c;即选择Cell-CellType-Markdown 1. 快速插入图片 要在Jupyter Notebook中插入图…

澎湃算力 玩转AI 华为昇腾AI开发板——香橙派OriengePi AiPro边缘计算案例评测

澎湃算力 玩转AI 华为昇腾AI开发板 香橙派OriengePi AiPro 边缘计算案例评测 人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着我们的生活、工作乃至整个社会的面貌。作为推动这一变革的关键力量&#xff0c;边缘计算与AI技术的深度融合正成为行业发展的新趋势…

数据仓库的一致性维度

一致性维度的定义&#xff1a; 一致性维度是指在数据仓库中&#xff0c;具有相同属性和含义的维度在不同的事实表中保持一致。它确保了通过不同事实表进行查询和分析时&#xff0c;维度数据的一致性和准确性。 一致性维度的作用&#xff1a; 数据一致性&#xff1a;一致性维度…

【git】设置github代理

记录git的一些操作。主要是创建分支和如何配置全局代理、github代理。git 本地创建分支并提交 ChatGPT 在 Git 中创建一个本地分支并提交更改可以通过以下步骤完成: 打开终端:首先,打开你的命令行终端。 切换到你的项目目录:使用 cd 命令切换到包含你项目的目录。 bash…

php反序列化练习题

Demo1 <?php error_reporting(0); //关闭错误报告class happy{ protected $filedemo1.php; public function __construct($file){ $this->file$file; } function __destruct(){ if(!empty($this->file)){if(strchr($this->file,"\\")false &&…

Redis持久化(AOF和RDB)

目录 前言 一.RDB 1.1手动执行 1.2自动执行 二.AOF 2.1重写机制 三.混合持久化 Redis的学习专栏&#xff1a;http://t.csdnimg.cn/a8cvV 前言 持久化&#xff0c;在之前&#xff0c;我们接触这个词汇是在mysql数据库当中的事务四大特性里。 持久性&#xff1a;指一旦事…

Linux网络编程之UDP

文章目录 Linux网络编程之UDP1、端口号2、端口号和进程ID的区别3、重新认识网络通讯过程4、UDP协议的简单认识5、网络字节序6、socket编程接口6.1、socket常见接口6.2、sockaddr通用地址结构 7、简单的UDP网络程序7.1、服务器响应程序7.2、服务器执行命令行7.3、服务器英语单词…

vue中v-if和v-for

vue中v-if和v-for Vue 官方建议不要在同一个元素上同时使用 v-if 和 v-for 指令&#xff0c;主要有以下几个原因&#xff1a; 性能问题&#xff1a; 当 v-if 和 v-for 一起使用时&#xff0c;Vue 在每次渲染时都需要先执行循环&#xff0c;然后再对每个元素进行条件判断。这可能…

React antd form表单未保存跳转页面提示

需求是&#xff1a; 表单编辑后没保存&#xff0c;跳转其他页面需要提示未保存&#xff0c;保存就继续form的submit&#xff0c;反之就是关闭弹窗&#xff0c;再切换菜单正常跳转路由。 关键代码如下&#xff1a; const [initialFormValues, setInitialFormValues] useState…

vue学习笔记(十)——Vuex(状态管理,组件间共享数据)

1. vuex基础-介绍 1.1 为什么会有Vuex ? 在现代 Web 开发复杂多变的需求驱动之下&#xff0c;组件化开发已然成为了事实上的标准。然而大多数场景下的组件都并不是独立存在的&#xff0c;而是相互协作共同构成了一个复杂的业务功能。 组件间的通信成为了必不可少的开发需求。…