P9562 [SDCPC2023] G-Matching 题解】的更多相关文章

点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求的就是满足\(A^x \equiv \frac GS\)的最小的x(离散对数).有一个叫BSGS的东西是专门干这个的 考虑能不能把这个式子直接化成\(A^x \equiv B\)的形式.先把答案=0.A=0和A=1的情况特判掉,因为会影响后面推式子. \[\begin{align} A^xS+(1+…
6. Wildcard Matching 题目 Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character.'*' Matches any sequence of characters (including the empty sequence). The matching should cover the entire input string (not p…
题目链接 题目大意 t组数据,给你一个n(n<=1e9)求高度为n的等边三角形,求里面包含了多少个等边三角形 题目思路 打表找规律,然而我一直没找到规律. 看到题解恍然大悟,答案就是C(n+3,4).因为是求三角形的数目,要联系到杨辉三角组合数之类的,才能想到答案 代码 #include<set> #include<map> #include<queue> #include<stack> #include<cmath> #include&l…
淦,最后一道题没写出来,...还是我太菜了,不过这个题确实比较有趣. G. Minimal Coverage 简化题意:就是你处在坐标轴的0点上,给你一个序列\(a_i\),每次你可以选择向左走\(a_i\),也可以选择向右走\(a_i\),求你走过的范围的最小值?(第一步必须向右走). 其实这个题想起来也没那么复杂,显然每一步在选择时,我们需要一下的信息:当前所处的位置,当前走到哪一步了,当前所走过的范围的左右边界.信息蛮多的,如果用DP的话,当前走到哪一步了,这个很好解决,剩下的三个信息:当…
刚开始的时候被E题卡住了,不过发现是个数学题后就开始使劲推式子,幸运的是推出来了,之后的F题更是树形DP换根的模板吧,就草草的过了,看了一眼G,随便口胡了一下,赶紧打代码,毕竟时间不多了,最后也没打完!比赛结束五分钟后,打完代码,woc,连样例都过不去,一看,确实忽略了一些情况.这个题卡的值了! G - Isosceles Trapezium 题目中有1000个点,每个点都有一定的权值,要求你选出四个点,使得他们的权值和最大并且能够组成一个等腰梯形. 首先我们肯定是要挖掘等腰梯形的性质,来帮助我…
题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很多地方借鉴后缀数组. 倍增:比如这次排序好了长度为m的串,那么想扩展为长度为2*m的串则需要用i的排名为第一关键字,i+m的排名为第二关键字进行排序,这种排序正好可以使用基数排序. 下面是代码: #include<stdio.h> #include<string.h> #include…
点这里去做题 水水水水水,不难发现如下表 t 1 2 3 4 v 1 3 5 7 s 1 4 9 16 明显s=t*t 题目中对10000取模即取后四位,即对1000取余 #include<stdio.h> int main() { long long v,T,t,s; scanf("%lld",&T); while(T--) { scanf("%lld",&t); s=t*t; s=s%; printf("%lld\n&quo…
[参考博客][https://blog.csdn.net/Tawn0000/article/details/82255682] 题意: 将n个数按照每k个一组来合并,合并需要花费的cost是两个数的长度和,问:在T的消费内将所有的数合并所需的最小的k. 分析: 合并之前要处理一下零头,因为每次取k个一直到最后一步剩下的数的个数可能会少于k个,这样的结果就是合并的cost更大了,举个例子:1 2 3 4 5 6,k=4时,先选1 2 3 4然后再5 6 10 是31,但是因为零头有3,先处理3个零…
外传:编剧说了不玩游戏不行 题意: 有n个石堆,我每次只能从某一堆中取偶数个石子,你取奇数个,我先手,先不能操作的人输.问最后谁能赢. 思路: 这个题仔细想想,就发现,取奇数的人有巨大的优势,因为假设有一个奇数堆的,我只要一直取其他堆,直到剩下这一个奇数堆的时候我就赢了,因为取偶数的人无论如何都取不了这一个奇数堆的,然后我们发现,假设当前没有奇数堆,只要还剩下石子堆,我只要取1个就能变成奇数堆,然后我就必胜了,所以只有一种情况可能会输,那就是只有一堆石子且那一堆是偶数个,被对面先手一次性取完,不…
题目链接 题目大意 给你一个方形矩阵mp,边长为n(n<=21) 有n个男生和女生,如果\(mp[i][j]=1\) 代表第i个男生可以和第j个女生配对 问有多少种两两配对的方式,使得所有男生和女生都一一匹配 题目思路 看数据显然是一个状压dp 设\(dp[i][j]\)表示前i个男生匹配的女生的状态为j,三重for即可 优化:但是枚举状态的时候其实判断有多少个1就已经知道有多少个人被匹配了,那么其实枚举人数是没有必要的,可以先枚举状态然后判断人数即可优化一维循环,当然数组也可以滚动优化代码懒得…