soj 131 找题

给出两个长度为n,都含k个1的字符串A,B。现在令\(a_1,a_2,\dots,a_k\)是A中1的下标,\(b_1,b_2,\dots,b_k\)是B中1的下表,然后将a,b等概率随机排列,接下来按1到k的顺序交换\(A_{a_i}\)与\(A_{b_i}\)。令P为交换之后A与B相同的概率,求\(P*(k!)^2\)对\(998244353\)取模的结果。n<=10000。

本来以为只要随机排列b就行了,但是由于是顺序交换,所以要随机排列必须a和b都排列一下。那怎么办呢?我们来举个栗子:

上面是a串,下面是b串。我们发现,蓝框内的位置,A数组都能交换两次。红框内的位置只能交换一次。

设i表示还有i个位置可以交换两次,j表示还有j个位置可以交换一次。\(f[i][j]\)表示剩下i和j的方案数,那么就有状态转移方程:\(f[i][j]=f[i-1][j]+f[i][j-1]\)。(我也想不清楚)。

https://blog.csdn.net/WerKeyTom_FTD/article/details/78209400

#include <cstdio>
#include <cstring>
using namespace std; const int mod=998244353; const int maxn=10005;
int l, x, y;
char s1[maxn], s2[maxn]; int fmi(int a, int x){
long long base=a, ans=1;
for (; x; base=base*base%mod, x>>=1)
if (x&1) ans=ans*base%mod;
return ans;
} int jc[maxn], revjc[maxn];
void init(){
jc[0]=revjc[0]=1;
for (int i=1; i<maxn; ++i){
jc[i]=1ll*jc[i-1]*i%mod;
revjc[i]=fmi(jc[i], mod-2);
}
} int f[maxn][maxn/2], ans; inline void up(int &x, int y){ x=(x+y)%mod; }
int c(int m, int n){ return 1ll*jc[m]*revjc[m-n]%mod*revjc[n]%mod; } int main(){
init(); scanf("%s%s", s1, s2); l=strlen(s1);
for (int i=0; i<l; ++i)
if (s1[i]==49&&s2[i]==49) ++x;
else if (s1[i]==49||s2[i]==49) ++y;
y/=2;
f[x][y]=1;
for (int i=x; i>=0; --i)
for (int j=y; j>=0; --j){
if (i) up(f[i-1][j], 1LL*i*j%mod*f[i][j]%mod);
if (j) up(f[i][j-1], 1LL*j*j%mod*f[i][j]%mod);
}
for (int i=0; i<=x; ++i)
up(ans, 1LL*jc[i]*jc[i]%mod*f[i][0]%mod*c(x+y, i)%mod);
printf("%d\n", ans);
return 0;
}

最新文章

  1. [python] File path and system path
  2. 在linux中减小和增大LV的过程与思考
  3. ios - kvo观察者示例
  4. 基于海明距离的加权平均值人职匹配模型(Sqlserver2014/16内存表实现)
  5. Codeforces Round #231 (Div2) 迟到的解题报告
  6. LDR指令的格式:
  7. windows10 无法搜索本地应用的解决办法
  8. oracle约束条件状态
  9. mybatis拦截器分页
  10. JS外链
  11. Java 小记 — Spring Boot 注解
  12. java Serializable 生成随机序列
  13. expect--自动批量分发公钥脚本
  14. STL基础4:deque
  15. JavaScript之函数调用与被调用的上下文对象this
  16. 3种web会话管理方式:基于server端session方式、cookie-based方式、token-based方式
  17. OpenCL、OpenGL、OpenAL
  18. 基于TINY4412的Andorid开发-------简单的LED灯控制
  19. Scala的类与类型
  20. user_mongo_in_a_docker_and_dump_database

热门文章

  1. openwrt: Makefile 框架分析[转载]
  2. 网页效果分析 VCD分解
  3. 2018年长沙理工大学第十三届程序设计竞赛 H数学考试
  4. python web框架 Django基本操作
  5. 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN
  6. Log4j 记录error 日志
  7. 虚拟机VMware的安装以及指南
  8. matlab学习笔记(4)
  9. c#基础;初步学习循环语句
  10. Java-马士兵设计模式学习笔记-迭代器模式-模仿Collectin ArrayList LinckedList