首页 > 其他分享 >CSP-S加赛1

CSP-S加赛1

时间:2022-09-03 21:34:35浏览次数:46  
标签:return ll ans 加赛 位为 CSP dp mod

A. antipalindrome

真 · 签到题

然后忘了给 \(m\) 取模, 挂了 \(10pts\)

考虑任何大于\(1\) 的回文, 必然存在相邻两个字母相同,或者中间隔一个字母,那么从前往后考虑每一个位置,他有 \(m - 2\) 种可选方案

答案就是 \(m * (m - 1) * (m - 2) ^{n - 2}\)

code
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
ll qpow(ll x, ll y){
	ll ans = 1;
	for(; y; y >>= 1, x = x * x % mod)if(y & 1)ans = ans * x % mod;
	return ans;
}
ll n, m;
ll work(){
	m %= mod;
	if(n == 1)return m;
	if(n == 2)return m * (m - 1) % mod;
	if(m == 1)return 0;
	return m * (m - 1) % mod * qpow(m - 2, n - 2) % mod;
}
int main(){
	int t; scanf("%d",&t);
	for(int ask = 1; ask <= t; ++ask){
		scanf("%lld%lld",&n,&m);
		printf("%lld\n",work() % mod);
	}
	return 0;
}

B. ZZH与计数

预处理打挂了, 然后没捞到暴力分...

发现对于一个数 \(i\), 它有 \(a\) 位为 \(1\), \(b\) 位为 \(0\), 那么对于 \(a\) 中 \(x\) 位为 \(1\), \(b\) 中 \(y\) 位为 \(1\) 的所有数,得到他们的概率是一样的, 可以用数学归纳法证明

进一步扩展,发现对 \(a\) 相同的 \(i\) 到相同的 \(x\), \(y\), 概率也是一样的

所以我们可以按照 \(a\) 进行处理,得到 \(f_{a, x ,y}\)

然后进行一些 \(dp\) 得到答案

先考虑如何求得 \(f\)

发现当 \(a, b\) 确定时, 从二元组 \((i, j)\) 转移到 \((x, y)\) 的概率是不变的, 于是我们可以用矩阵乘法进行转移,快速幂优化一下

转移矩阵系数,在 \(i >= x j >= y\) 时, 有 \(p\) 概率操作, 一共\(2^{i + j}\)种结果, 其中 \(C_i^xC_j^y\)种为目标状态,于是这部分系数为 \(p * C_i^xC_j^y * inv(2^{i+ j})\)

类似的可以得到 \(i <= x j <= y\) 的转移系数,这里不再展开

最后从矩阵转存到\(f\)数组对应位时乘上\(inv(C_a^xC_b^y)\)

对于这部分矩阵乘法,有 \(n^2\)个二元组,这是 \(n^4\)的矩阵, 每次乘法都是 \(n^6\), 所以一共复杂度 \(n^7log m\)

好像有亿点大, 所以优化一下常数, 发现每次使用的数满足 \(x <= a\), \(y <= b\),每次只对他们进行标号,不必每次跑 \(n^4\)矩阵, 这样我们给它乘上了一个非常小的常数 (\(< 1\)) 所以复杂度就正确了

再考虑 \(dp\),设\(dp_{i, s, a, b}\) 表示处理完了前 \(i - 1\) 位, 答案的前 \(i - 1\) 位为 \(s\) 的前 \(i - 1\) 位, \(s\) 的剩余位是未处理的原始值, 还需要\(a\) 位原始值为 \(1\) 的位填 \(1\), \(b\)位原始值为 \(0\) 的填 \(1\)的期望

初始状态枚举所有数 \(s\) 以及对应的 \(a, b\)

\(dp_{0, s, a, b} = v_s * f_{ct[s], a, b}\)

转移显然

答案就是 \(dp_{n, 0, 0, 0}…… dp_{n, 2^{n} - 1, 0, 0}\)

标签:return,ll,ans,加赛,位为,CSP,dp,mod
From: https://www.cnblogs.com/Chencgy/p/16653704.html

相关文章

  • CSP-S模拟1
    下发文件和题解A.斐波那契对于上面这张图,尝试从2开始依次写下每个兔子的父亲的标号:那么转换成数列就是这样的:111212312345...可以发现这个序列由多个......
  • CCF CSP-J/S 2021第二轮获奖分数线及评级规则
    CCFNOI科学委员会、竞赛委员会召开会议,确定了CCFCSP-J/S2021第二轮评级规则及评级名额方案。提高级一等名额分配方案提高级一等全国认证基准线:100分CCFCSP-J/S第二......
  • CSP_202206-2_寻宝!大冒险!
    CSP_202206-2_寻宝!大冒险题目链接思路相当于判断两个有限集合AB之间是不是满射和单射,只需要保证以下两点A和B元素个数相等A中每个元素都能通过映射\(\psi\)到B中一个......
  • hzx的CSP-J模拟赛题解
    T1按题意模拟即可,注意不用考虑闰年。T2\(30\%\)的数据:使用\(Floyd\)求出图的全源最短路,时间复杂度\(O(n^3)\)。\(50\%\)的数据:对图上每个点使用\(Dijkstra\)求......
  • CSP2022初赛笔寄
    下面的全都不会图论存储图邻接矩阵(权矩阵)边集数组邻接表最小生成树MSTPrim(贪心)Kruskal(贪心)最短路Floyd(₯)(多源最短路APSP)Dijkstr......
  • CSP基础知识(汇总)
    目录linux基础命令进制转换排序算法原码、补码、反码、计算运算符linux基础命令ls--查看当前目录下所有文件cd--切换目录cp--复制文件mv--移动文件touch--建立新......
  • CSP 202006-1 202006-2 题解
    #202006-1线性分类器在坐标系中,我们可以考虑使用同一横坐标x值对应的y值来判断在直线的上方一侧还是在下方一侧。当然,如果不在坐标系中也可以统计点和直线的位置关系,这......
  • CSP认证(2022-06-12)
    Themorepeopleyoulove,theweakeryouare.Thethingswelovedestroyuseverytime.\(vscode\)也配置好了,\(html\)慢慢摸索着也能写些简单的本地网页了,\(CSP\)......
  • 【TPC附加赛YSTG】星坠比赛题解
    零、写在前面比赛地址本人比较菜,在这场接近提高组的模拟赛中获得了\(30+100+30+50=210\)的烂分事实上只要把暴力打足成绩一般就不会差但后来本人在Z......
  • 2022河南萌新联赛第(七)场:南阳理工学院ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛牛客
    2022河南萌新联赛第(七)场:南阳理工学院ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛牛客竞赛OJ(nowcoder.com)1.B-龍_2022河南萌新联赛第(七)场:南阳理工学院(nowcoder.com)......