【NOIP模拟考三】DP+组合数 day1 third 小球游戏
来源:互联网 发布:郑州大学软件技术学院 编辑:程序博客网 时间:2024/06/06 00:14
题目描述
输入
输出
样例输入
(如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)
40 01 10 11 0
样例输出
12
三连击就快完成了。。。(PS:本题答案mod 998244353,这是一个质数)
这道题还是有点难想,我本来看数据就知道只有两种可能——1.nlogn 2.A(或B)^2,但考试时去想第一种了,(第二种想不出来QAQ)不过依然没有想出什么,就打了暴力……(暴力还打错了QAQ)
很容易发现,如果是两个盒子(Ai,Bi)和(Aj,Bj),那么答案就是C(Ai+Aj+Bi+Bj,Ai+Aj)。由于A、B是复合属性,所以不能拆开算,所以我们把他们表示成坐标上的点,A作为x,B作为y(反之亦然)。那么显然,上述式子求出的便是(O-i)->j,每次往上或右走一格的方案总数(O是原点)。由于本题数据的特殊性,所以这个原本是组合数学的题目可以用网格DP解得更快,求了第三象限所有点到第一象限所有在输入中的点的行走方案总数后我们就把它输出不能输出!还有一些不合法的情况!例如,i->j和j->i本质上其实是一样的,却被重复计算,而i->i则不合法。我们可以O(n)并利用组合数减去C(2*Ai+2*Bi,2*Ai)。然后考虑重复的情况,由于对称性,我们可以直接除以
2(乘上2的逆元)
至此,就是代码了:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 200005#define M 6005#define mod 998244353int n,A[N],B[N],ans;int dp[M][M];int f[2*M-5],g[2*M-5];void exgcd(int a,int b,int &x,int &y){ if(!b){x=1;y=0;return;} exgcd(b,a%b,y,x); y-=a/b*x;}int NY(int a,int m){ int x,y; exgcd(a,m,x,y); return (x%m+m)%m;}int C(int m,int n){ return 1ll*f[m]*g[n]%mod*g[m-n]%mod;}int main(){ scanf("%d",&n); f[0]=f[1]=g[0]=g[1]=1; for(int i=2;i<=12000;i++) { f[i]=1ll*f[i-1]*i%mod; g[i]=NY(f[i],mod); } for(int i=1;i<=n;i++) { scanf("%d%d",&A[i],&B[i]); dp[-A[i]+3000][-B[i]+3000]++; } for(int i=0;i<=6000;i++) for(int j=0;j<=6000;j++) { if(i) dp[i][j]=(dp[i][j]+dp[i-1][j])%mod; if(j) dp[i][j]=(dp[i][j]+dp[i][j-1])%mod; } for(int i=1;i<=n;i++) { ans=(ans+dp[A[i]+3000][B[i]+3000])%mod; ans=((ans-C(A[i]+A[i]+B[i]+B[i],A[i]+A[i]))%mod+mod)%mod; } ans=1ll*ans*g[2]%mod; printf("%d",ans);}
阅读全文
1 0
- 【NOIP模拟考三】DP+组合数 day1 third 小球游戏
- 【NOIP模拟考一】组合数学 day1 third 子集
- 【NOIP模拟考三】分治 third 火柴排队(ranks.cpp)
- 【NOIP模拟考三】水资源——二分答案+Floyd验证 day1 first 信号连接
- 【NOIP模拟考三】无向图的桥 day1 second 荒岛野人
- noip模拟赛 小球游戏 cqbzoj3391(网格路径模型)
- [NOIP模拟]Day1
- 洛谷 NOIP 模拟 DAY1
- NOIP模拟 赌博游戏【概率dp】
- 【NOIP模拟考三】水资源 day2 first 序列计数
- 1- noip模拟赛 DAY1
- [NOIP模拟赛Day1]轰炸
- 【NOIP 模拟题】[山东多校联合模拟赛 day1 T2] 祖先(dp)
- 【NOIP模拟赛三】并查集+hash day2 third 雪后村庄(好题)
- XJOI NOIP模拟题2[数论][组合数][树规]
- 湖南NOIP集训模拟题DAY1 BY ExfJOE [贪心][DP][二分]
- 【NOIP模拟赛六】状态压缩DP day1 second 酷子集
- 拓扑,DP noip 模拟赛 [益智游戏] 题解
- C#目录树控件
- Maven 添加本地jar包
- 练习 2017-8-14 使用缓存字节流 和 字节流 拷贝性能对比。
- 查看当前应用cpu和内存使用情况
- 【Unity】【Code】【UI】通用代码库(二)——UI跟随GameProject移动
- 【NOIP模拟考三】DP+组合数 day1 third 小球游戏
- IOS逆向--Safe mode
- 关于javac不是内部和外部命令原因
- 相关优质项目
- javascript高级程序设计第三版 第三章 基本概念
- hdu6114Chess(组合数取余,逆元)
- PHP魔术方法
- h5 监听 横竖屏 旋转
- 深入理解JVM之JVM内存区域与内存分配