首页 > 编程语言 >第十五届蓝桥杯大赛软件赛国赛 C/C++ 大学 A 组 游记

第十五届蓝桥杯大赛软件赛国赛 C/C++ 大学 A 组 游记

时间:2024-06-02 22:45:34浏览次数:32  
标签:10 质因数 后面 C++ 蓝桥 枚举 感觉 直接 赛国赛

Preface

前情提要:去年圈钱杯国赛游记,本来还想着今年报JAVA/PY的,结果语法一个学不懂还是去CPP组开卷了

省赛很简单但因为最后一题看漏条件了还是遗憾离场,但也给了我一种今年篮球杯水的一批的刻板印象

然后国赛被一堆数学题直接创飞了,但好在前面几个题还能胡几个做法出来,但FWT和神秘筛子是写不了一点

不过好消息是今年出分挺快的,昨天打的比赛今晚就能出分了,最后CA组Rank4也算是个比较不错的成绩了吧,至少去年一年的努力勉强能看出点成果(虽然我感觉平时比赛都是在抱队友大腿)

说回比赛,由于电专离考点贼远,不得不6点50起床去赶地铁,头天晚上还2点多才睡,鉴定为要猝死了

经过经典出租车——地铁——共享单车一条龙冲刺后,勉强在开始前赶到考场

找到座位后发现周围一圈都是电专22级的,后面有俊哥前面有cai神和雷大爷

比赛开始时还经典出锅环节,电脑死活连不上网,重启了也没用还非得关机在开机,等我折腾完看到题面时10min都过去了


During Contest

可能是由于没太睡醒吧,困得要死反而对延迟超高的键盘和卡的一笔的电脑没啥感觉了,看到第一题先慢悠悠调个日历出来翻了个答案出来

第二个填空也是老套路了,随便化一下式子就变成一个约数分解的问题,写完一跑输出一个看起来很大的数

但因为它没有给我报个负数出来,当时也脑抽了没注意可能会爆 long long,直接复制提交完事

(沟槽的当时省赛都能看出\(A(10^6,4)\)会爆long long,结果国赛连个这么明显的东西都没看出来,经典开局不在状态了属于是)

后面的两个10分题都比较显然,C手玩一下就是先给相邻的面对面走的算出答案,剩下的拿个并查集随便维护一下就行了

D的话刚开始还有点没思路,后面发现由于目标状态已经给定了直接倒着BFS一遍算出到每个状态的最短路就完事了

大力写了个mapvector没太管常数,虽然本机跑的很慢但感觉这题的时空限制就是为了可以直接STL乱搞准备的,就没去写康托展开了

E的话把式子移个项后发现直接离散化后拿树状数组维护下就好了,写完还拍了一波感觉还是挺稳的

F感觉是个老朋友了,和\(n\)相关的做法应该是要用莫反,但这题\(x,y\)的值都不大直接对\(x,y\)分解质因数后容斥算一下贡献应该也能跑

写完调了下样例过了就没管了,感觉这场counting的样例都给的挺强的

G题一眼矩阵快速幂优化DP,大致就是设状态\(f_{i,j,0/1/2}\)表示构造了长度为\(i\)的串,当前匹配了模板串的前\(j\)位,一共匹配成功了\(0/1/2\)次的方案数

转移的话就是枚举\(3\times |S|\)种状态然后枚举所有字符的填法,要找转移后的状态的话需要用KMP求next数组

但众所周知我不会string,尝试默写KMP失败后想起这个模板串长度才\(30\),直接大力枚举把next数组求出来就完事

这题样例也是十分之强啊,过了大样例后就扔了没管了,一看时间只剩90min了感觉还有3个题还是比较紧张的

中间溜出去上了个厕所,然后要了张草稿纸后开始转战H这个博弈,由于平时博弈基本都扔给祁神想的说实话内心还是有点虚

不过大致手玩了一会后感觉最后的流程一定是先在前\(R\)轮先手放两个,然后后手拿一个;然后后面的轮次后手每次都至少拿走两个,对答案就没有影响了

想到这点后就很容易想到二分\(R\)的值了,检验的话就是看能否在棋盘上选\(R+1\)个点,使得它们两两都不被\(R\times R\)的矩形所覆盖,这个点数显然就是\(\lceil\frac{n}{R}\rceil^2\)

然后点开I一看本来以为终于有树上问题可以发挥下强项了,结果仔细一看怎么又是神秘数学题

\(10^9\)的数据一看就要找关键性质,但这种东西我一般都找不到,所以打算先去写个\(10^6\)的部分分

由于这棵树形状的特殊性,深度其实非常非常小,因此算树上路径不用写点分治复杂度也是对的

但后面合并子树的时候出了个致命问题,由于最后要求路径贡献的乘积(而不是和),导致诸如按位拆贡献、0/1Trie等处理方式完全派不上用场

后面感觉只能强行统计出每种异或值出现的次数最后统一算答案,但这样的话合并就要写FWT了,好家伙没有板子只能经典等死了,想了半天最后\(O(n^2)\)跑路

J题一看题面就梦回去年省赛最后一题,拉下去一看这个数据范围简直吓死人,\(1.5\times 10^{16}\)是否有点太强劲了

由于此时时间剩余不多了,而且感觉就算会用莫反化式子也写不出杜教筛,索性直接去写\(O(n)\)的部分分了

这档的话只需要枚举\(i\in[1,n]\),然后将\(i\)分解质因数后,设其所有指数为奇数的质因数乘积为\(M\)

不难发现如果\(i\times j\)是完全平方数的话,则\(j\)一定是\(M\)的倍数,那么\(j\)剩下的部分就是开一个根号就能统计的了

由于担心直接枚举\(i\)然后分解质因数常数有点大,后面去写了直接先筛出质因数后然后DFS构造出\(i\)的做法,中间还犯了一堆神秘错误最后勉强写完

写对拍捏了几组数据后感觉正确性是没问题了,想本机测一下极限数据的速度来着,结果发现一直RE运行不了

后面意识到应该是本地爆栈了,但我又忘了DEV怎么调栈大小的了,索性不测了直接开摆听天由命

最后检查了下提交的东西后比赛就结束了,感觉好像啥难题也没写都水了一场比赛


Postscript

赛后本来想和23级学弟拼车回清水河的,不过由于先看到了融融和小武一行人就不要脸地和他们一起恰饭去了

最后爽炫老成都风味川菜,口味确实很赞吃的很爽,酒足饭饱后也是直接打车回学校,一到寝室就直接洗澡睡觉一条龙,一觉睡到晚上7点可海星

虽然今年打的还算可以,但感觉可能也就是挂的分比较少吧,大体是吸取了之前几次线下赛屡犯唐氏问题的缘故吧

总而言之关于篮球杯的心结也算是解开了,明年应该打死我都不会再来打了(flag

标签:10,质因数,后面,C++,蓝桥,枚举,感觉,直接,赛国赛
From: https://www.cnblogs.com/cjjsb/p/18227762

相关文章

  • Re0:从零开始的C++游戏开发 【下】
    Re0:从零开始的C++游戏开发(下)这是蒟蒻观看B站upVoidmatrix的课程从零开始的提瓦特幸存者的个人笔记【自用】前言:采用适用于小白的easyx图形库。第三集提瓦特の幸存者(下)3.1用户界面实现和设计模式基础3.1.1导言假设这样一个场景:在一个游戏中,出现在你的视野中的树木......
  • Re0:从零开始的C++游戏开发【中】
    Re0:从零开始的C++游戏开发(中)这是蒟蒻观看B站upVoidmatrix的课程从零开始的提瓦特幸存者的个人笔记【自用】前言:采用适用于小白的easyx图形库。第三集提瓦特の幸存者3.1程序动画实现及角色移动在开始之前,我们应该认识到,尽管我们可以通过点线面绘制简单的画面,但是想......
  • C/C++mai函数的参数
    在C和C++编程中,main函数通常是程序的入口点,定义程序的启动方式。函数签名intmain(intargc,constchar**argv,constchar**envp)包括三个参数:argc、argv和envp。这些参数分别用于接收命令行参数和环境变量。1.intargcargc代表“argumentcount”,表示传递给程序的命令行参......
  • c++ 多态整理笔记
    在C++中,多态性(polymorphism)是一种面向对象编程的特性,允许不同的对象通过相同的接口调用不同的实现。多态性主要通过虚函数来实现,使得基类的指针或引用可以指向派生类的对象,并调用派生类的重写函数。实现多态性的关键步骤声明虚函数:在基类中声明虚函数。重写虚函数:在派生类中......
  • C++课程设计实验杭州电子科技大学ACM题目(下)
    题目七:2060.Snooker题目描述ProblemDescription:background:PhiliplikestoplaytheQQgameofSnookerwhenhewantsarelax,thoughhewasjustalittlevegetable-bird.Maybeyouhadn'tplayedthatgameyet,nomatter,I'llintroducetheruleforyo......
  • C++实现自定义容器类型的范围循环
    先看一下类的设计与实现:classMyStack{public:MyStack()=default;MyStack(int*p,size_tlen):d(p),size(len){}int*begin(){returnd;}int*end(){return&d[size];}private:int*d=nullptr;size_tsize......
  • 6/1 第十五届蓝桥杯国赛pb组 真题本人答案 仅供参考
            6月1日,今天参加了第十五届蓝桥杯国赛,本人打的是pb组,做完回来就把代码复盘了一下。但由于成绩未出,答案仅供参考。第一题:31第二题:没写出来第三题:dic={}n,m=map(int,input().split())ls=list(map(int,input().split()))foriinrange(1,n+1):dic[i]......
  • C++多线程原理详解
    学习C++多线程时,我有如下疑问:mutex的lock和unlock做了什么?mutex、lock_guard、unique_lock,它们之间的关系是什么?condition_variable中的wait做了什么?带着这些疑问,我查阅了一些资料,整理出本文。文章目录一、mutex二、lock_guard三、unique_lock四、condition......
  • 从C++示例理解开闭原则
    开闭原则要求我们在编写代码时,尽量不去修改原先的代码,当出现新的业务需求时,应该通过增加新代码的形式扩展业务而不是对原代码进行修改。假如我们现在有一批产品,每个产品都具有颜色和大小,产品其定义如下:enumclassColor{Red,Green,Blue};enumclassSize{Small,M......
  • C++:细谈Sleep和_sleep
    ZINCFFO的提醒还记得上上上上上上上上上上上上上上上上上上(上的个数是真实的)篇文章吗?随机应变——Sleep()和_sleep()但在ZINCFFO的C++怪谈-02中:我不喜欢Sleep......奤?媜煞鷥!整活!Sleep()是个什么东东?    Sleep()在windows.h和graphics.h里面都有。voidSlee......