草庐IT

2022蓝桥杯省赛简要题解+复盘(C++ A组)

geruome 2024-04-10 原文

4.28 update:这都能压线省一?


与其说写题解,不如说是自己场上心里完全没数,下来想一遍发现T1(没加周围4刀),T2(把放满的状态当成了先手败,惯性思维了属于是),T4,T6(漏写更新条件)都挂了,心态爆炸. OI赛制恐怖如斯,估计只有60分了,连国赛都去不了了。
该好好反省下自己做题浮躁的习惯了,上次CSP就两眼出思路的T4也是卡了两小时,导致没时间做T3。更远的追溯到南京,2h12min第一发交H的树形dp,思路没错,因为写错变量名卡到4h24min(就是这么离谱),下来看了看1h内解决掉I,也算痛失银牌。。虽说acm不像OI,但也要少吃罚时少卡题。

另外第一次学对拍,附上对拍代码:

int main(){
    while(1){
        system("gen.exe > in.txt");
        system("E.exe < in.txt > out1.txt ");
        system("baoli.exe < in.txt > out2.txt ");   //baoli中间不能有空格,不然命令行识别不了
        if(system("fc out1.txt out2.txt")) break;
    }
}

A

法一:dp,记dp(r,c)表示切割一块r行c列的最少次数(没算外围的四刀),转移方程:

dp(r,c)=min(1+dp(r-i,c)+dp(i,c)), 1<=i<=r-1;

dp(r,c)=min(1+dp(r,c-j)+dp(r,j)), 1<=j<=c-1;

最后答案:dp(20,22)+4;
法二:考虑每条要切割的边(如图中红线,长度为1),如果一次只能切割一条边,答案就是边数=21 * 20+19 * 22;
不过显然可以一次切多条边。考虑每个交点对节省切割次数的贡献,对于每个交点,最优的方法是要么横着,要么竖着切,只能选一种,1次切了2条,使次数-1。那么答案 - = 交点数 (19 * 21) 。

B
博弈论+状压dp.
用8位2进制数记录8个格子的状态,每位上为1代表对应方格被选,0代表没被选。dp[i]=1时代表i为先手必胜态。
博弈论基础可知,先手必败态可转移到若干先手必胜态,而转移过后的状态标号一定小于原标号,故倒序做一遍即可。
Code:

#include<bits/stdc++.h>
using namespace std;
#define rep(i,j,k) for(int i=j;i<=k;++i)
#define per(i,j,k) for(int i=j;i>=k;--i)
#define IOS {cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);}
#define ll long long
#define P pair<int,int>
int t[]={1,2,4,8,16,32,64,128,3,6,12,48,96,192};
int dp[256];//当前情况下先手是否必胜
int main(){
    dp[255]=1;  //场上读假题了,惯性思维以为谁放不了谁输..
    per(i,255,0){
        if(!dp[i]){
            rep(j,0,13){
                if((i|t[j])==i )dp[i^t[j]]=1;
            }
        }
    }
    cout<<dp[1]<<dp[3]<<dp[2]<<dp[6]; //实际上此时小蓝是后手
}

C
全场最简单的送分题感觉。
记sum为n个数之和。对于特定i, ∑ j = 1 n a i ∗ a j \sum_{j=1}^na_i*a_j j=1naiaj = a i a_i ai * (sum- a i a_i ai);
考虑每对积算两次,则2 * ans= ∑ i = 1 n a i \sum_{i=1}^na_i i=1nai*(sum- a i a_i ai).
或者想不到算两次的话,遍历的过程中维护sum即可。

D
从D题开始怎么难度就上来了啊。。。。(第一次参赛,天真的我还以为真的是暴力杯,题目会很水(bushi))
题面:

大致想法是对 a l a_l al^ a r a_r ar=x 的一对(l,r)更新区间,即左端点位于[1,l],右端点位于[r,n]的询问是yes,比较常见的离线套路。
做法:离线询问,并按右端点从左到右对询问排序。从左向右遍历,遍历到i时,将i视为 a l a_l al^ a r a_r ar=x 的(l,r)中的r。对于前面所有的 a l a_l al^x= a r a_r ar,只考虑最靠右的 a l a_l al即可,这个由于数据范围小可以用一个数组实现。
那么右端点>=i的所有询问,如果左端点<=l即为yes。由于询问是按右端点排序的,统计询问答案也是随着遍历有序的。

E
期望dp+逆元
d p i dp_ i dpi为爬到高度i时的期望时间,直接上式子:
d p i − 1 dp_ {i-1} dpi1=(1- p i p_i pi)* d p i dp_i dpi + p i p_i pi * d p 0 dp_0 dp0 + 1;
显然 d p n dp_n dpn=0,那么我们可以得到n个关于 d p 0 dp_0 dp0 d p n − 1 dp_{n-1} dpn1的式子,解出 d p 0 dp_0 dp0即可。
发现 d p n − 1 dp_ {n-1} dpn1式子右边只与 d p 0 dp_ 0 dp0有关,把 d p n − 1 dp_ {n-1} dpn1带入 d p n − 2 dp_ {n-2} dpn2,再把 d p n − 2 dp_ {n-2} dpn2带入 d p n − 3 dp_ {n-3} dpn3 … 每一项都是 d p i dp_ i dpi= 系数* d p 0 dp_ 0 dp0+ 常数。 最终 d p 0 dp_ 0 dp0=系数* d p 0 dp_ 0 dp0+ 常数。

F

首先,要求的是最低跳跃能力,一眼二分。
然后注意到,从左向右和从右向左跳是等效的。于是转化为从0跳到n,可跳>=2*x 次。
又想到,对于当前所在的点和给定的跳跃能力,贪心地尽可能跳到最右的一定最优。
做法:check(跳跃能力k)即可:
d p i dp_i dpi 为从i往后跳能上岸的最多次数。首先 d p i dp_i dpi<= H i H_i Hi; 然后 d p i dp_i dpi 先找最右边能到的 d p i + k dp_{i+k} dpi+k, 如果 d p i + k dp_{i+k} dpi+k不能满足则把 d p i + k dp_{i+k} dpi+k 的次数全给 d p i dp_i dpi,再往左找下一个[i,i+k]范围内最大的。最终判断 d p 0 dp_0 dp0>=2 * x;
d p i dp_i dpi加的同时,记得 d p i + k dp_{i+k} dpi+k要减。 找最右边能跳到的石头可以用set维护。check的总复杂度O(nlogn).

G
题意:长度为n的序列,可修改一个长度为k的连续段(修改成同一个任意值),求修改后的最长不下降子序列。
解法:首先枚举修改的是哪一段,那么修改这一段后,答案就是把这一段左边和右边拼起来的最长不下降子序列长度+k。可以枚举左端点,在左端点不断右移的过程中,维护左边段的最长上升子序列,可以维护得到 <=任意值 的最长不上升子序列长度(线段树区间修改,区间max查询)。

H
计算几何。注意极角排序用叉积,不能引入误差。
比较暴力,线段树维护区间max+二分即可。

I
给定T(T<=1e5)个正整数ai(ai<=1e18),每个ai问能否表示为 x 1 y 1 x_1^{y_1} x1y1 * x 2 y 2 x_2^{y_2} x2y2 的形式,必须保证 y 1 y_1 y1, y 2 y_2 y2>=2,且四个数均为整数。
解法:
首先很重要的性质:如果是yes,一定存在 x 1 2 x_1^2 x12 * x 2 3 x_2^3 x23 的形式。证明:可以假设指数>3,那么一定可以写成2 * k+3或者2 * k的形式。
接下来考虑 x 1 x_1 x1, x 2 x_2 x2中较小的一个,易知其 <= 1 e 1 8 0.2 1e18^{0.2} 1e180.2,记M= 1 e 1 8 0.2 1e18^{0.2} 1e180.2
那么可以枚举M以内的质数(549个)作为ai的质因子,除完后剩下的数一定只能是某数的平方或三次方,否则不和题意。对于M以内的每个质因子,判断其幂次只要不为1即可分配到 x 1 2 x_1^2 x12 * x 2 3 x_2^3 x23中。

J

要知道[l,r]的部分和,其实就是知道sum[r]-sum[l-1].(sum代表前缀和)
那么对于M个已知条件,每个条件对l-1,r连边,那么知道sum[r]-sum[l-1]等同于r,l-1联通。带权并查集维护即可。

有关2022蓝桥杯省赛简要题解+复盘(C++ A组)的更多相关文章

  1. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点 - 2

    3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升

  2. 蓝桥杯备赛(二) - 2

    目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言:  在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC  已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析  这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy

  3. 蓝桥杯C/C++VIP试题每日一练之报时助手 - 2

    ?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是:  如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。  如果m不为0,则将时读出来,然后将分读出来,如5

  4. IDEA 2022 创建 Spring Boot 项目详解 - 2

    如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1.  创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1.  创建SpringBoot项目        打开IDEA,选择NewProject创建项目。        填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。        选择springboot版本以及需要的包,此处只选择了springweb。        此处需特别注意,若你使用的是jdk1

  5. 十四届蓝桥青少组模拟赛Python-20221108 - 2

    十四届蓝桥青少组模拟赛Python-20221108T1.二进制位数十进制整数2在十进制中是1位数,在二进制中对应10,是2位数。十进制整数22在十进制中是2位数,在二进制中对应10110,是5位数。请问十进制整数2022在二进制中是几位数?print(len(bin(2022))-2)#运行结果:11T2.晨跑小蓝每周六、周日都晨跑,每月的1、11、21、31日也晨跑。其它时间不晨跑。已知2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?#样例代码1ls=[0,31,28,31,30,31,30,31,31,30,31,30,31]ans=0k=6foriinrange(1,13)

  6. 2022年10月23日周赛ZZULIOJ - 2

    文章目录问题B:芝华士威士忌和他的小猫咪们代码&注释问题C:愿我的弹雨能熄灭你们的痛苦代码注释问题D:猜糖果游戏代码注释问题E:有趣的次方代码注释问题F:这是一个简单题代码&注释问题G:打印矩阵代码注释问题H:scz的简单考验代码注释问题I:完美区间代码&注释问题J:是狂热的小迷妹一枚吖~代码&注释2022年10月23日周赛ZZULIOJ问题B:芝华士威士忌和他的小猫咪们时间限制:1Sec内存限制:128MB题目描述芝华士威士忌很喜欢带着他的猫咪们一块跑着玩。但是小猫咪们很懒,只有在离他y米以内才愿意和他一块跑。这天他在坐标为x的位置,他想和他的猫咪们一块跑着玩。有n个小猫咪,第i个小猫咪在坐

  7. 【华为OD机试真题 java、python、c++】荒地电站建设【2022 Q4 100分】(100%通过+复盘思路) - 2

    代码请进行一定修改后使用,本代码保证100%通过率,本题目提供了java、python、c++三种代码。复盘思路在文章的最后题目描述祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。输入描述第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量之后每行为

  8. 蓝桥杯 stm32 MCP4017 - 2

    本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B&#

  9. [蓝桥杯单片机]学习笔记——串口通信的基本原理与应用 - 2

    目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式  2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器​编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置  3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一

  10. 玩客云刷机(2022-3-19亲测) - 2

    https://cloud.189.cn/t/BJbYreYbmUj2(访问码:djz6)(网盘2022-4-1更新)一、刷入armbian。1.1使用AmlBurnTool软件烧录首选底包至固件。烧录完成后断开玩客云电源备用。(靠近hdmi的那个口子。)1.2使用WIn32diskimager软件将emmc固件写入U盘。1.3写入成功后,先将U盘插入玩客云靠近网线接口端的USB口,再接入电源。玩客云通电后指示灯会先亮绿灯,再亮蓝灯,红蓝闪烁,最后蓝灯常亮。等到确定蓝灯常亮后,再拔掉U盘、电源。(最好蓝灯常亮后,启动一次玩客云,看看ssh是否正常。)1.4使用WIn32diskimager写入

随机推荐