https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417

假设有i步选择不动,就有n-i步移动

假设其中又有a步选择往右移,就有n-i-a步左移

所以-m<=a-(n-i-a)<=m

所以(n-m-i)/2<=a<=min{ n-i,(n+m-i)/2 }

令g(i)=Σ C(n-i,a)(3^a)(2^(n-i-a))

答案=Σ C(n,i)g[i]

考虑如何递推求出g[i]

令f(n,m)=C(n,m)(3^m)(2^(n-m))

则3f(n-1,m-1)+2f(n-1,m)=f(n,m)

假设n=8,m=3

g[0]=                          f(8,3)+  f(8,4)+  f(8,5)

=            3f(7,2)+5f(7,3)+5f(7,4)+2f(7,5)

g[1]=              f(7,2)+  f(7,3)+  f(7,4)+  f(7,5)

=3f(6,1)+5f(6,2)+5f(6,3)+5f(6,4)+2f(6,5)

g[2]=              f(6,2)+  f(6,3)+  f(6,4)

=3f(5,1)+5f(5,2)+5f(5,3)+2f(5,4)

g[3]=  f(5,1)+  f(5,2)+  f(5,3)+  f(5,4)

可以发现,如果已知g[i],那么将g[i]乘5,然后在搞一搞头尾就可以

)#include<cstdio>
#include<algorithm> using namespace std; #define N 3000001 const int mod=; typedef long long LL; int g[N];
int pow2[N],pow3[N],fac[N],inv[N]; int C(int n,int m)
{
return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;
} int f(int n,int m)
{
return 1ll*C(n,m)*pow3[m]%mod*pow2[n-m]%mod;
} int pow(int n,int m)
{
int s=;
for(;m;m>>=,n=1ll*n*n%mod)
if(m&) s=1ll*s*n%mod;
return s;
} int main()
{
int n,m;
scanf("%d%d",&n,&m);
pow2[]=;
pow3[]=;
fac[]=;
inv[]=;
for(int i=;i<N;++i)
{
pow2[i]=pow2[i-]*%mod;
pow3[i]=1ll*pow3[i-]*%mod;
fac[i]=1ll*fac[i-]*i%mod;
inv[i]=pow(fac[i],mod-);
}
int l=,r=,nl,nr,ans=;
for(int i=n;i>=;--i)
{
nl=max(,n-m-i+>>);
nr=min(n-i,m+n-i>>);
if(nl>l) ans=(ans-f(n-i,l++)+mod)%mod;
while(nr>r) ans=(ans+f(n-i,++r))%mod;
g[i]=ans;
ans=5ll*ans%mod;
if(nl>=) ans=(ans+3ll*f(n-i,nl-)%mod)%mod;
ans=(ans-3ll*f(n-i,nr)%mod+mod)%mod;
}
ans=;
for(int i=;i<=n;++i) ans=(ans+1ll*C(n,i)*g[i]%mod)%mod;
printf("%d",ans);
return ;
}

2020牛客寒假算法基础集训营4 J 二维跑步的更多相关文章

  1. 2020牛客寒假算法基础集训营2 J题可以回顾回顾

    2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...

  2. 2020牛客寒假算法基础集训营1 J题可以回顾回顾

    2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...

  3. 2020牛客寒假算法基础集训营2 J.求函数 (线段树 推公式 单点修改 区间查询)

    https://ac.nowcoder.com/acm/contest/3003/J 题解: #include<bits/stdc++.h> typedef long long ll; u ...

  4. 2020牛客寒假算法基础集训营1 J. 缪斯的影响力 (矩阵快速幂/费马小定理降幂)

    https://ac.nowcoder.com/acm/problem/200658 f(n) = f(n-1) * f(n-2) * ab ,f的第一项是x,第二项是y. 试着推出第三项是x·y·a ...

  5. 2020牛客寒假算法基础集训营4-F树上博弈

    链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...

  6. 2020牛客寒假算法基础集训营4-I 匹配星星【贪心】

    链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 示例1 输入 复制 2 1 1 0 2 2 1 2 1 1 0 2 2 1 输出 复制 1 1 ...

  7. 2020牛客寒假算法基础集训营1 F-maki和tree

    链接:https://ac.nowcoder.com/acm/contest/3002/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  8. 牛客寒假算法基础集训营5 J 炫酷数学

    链接:https://ac.nowcoder.com/acm/contest/331/J来源:牛客网 小希最近想知道一个东西,就是A+B=A|B(其中|为按位或)的二元组有多少个. 当然,直接做这个式 ...

  9. 2020牛客寒假算法基础集训营5 G街机争霸

    题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...

随机推荐

  1. Python学习之面向对象基础

    python的面向对象和以前学的c++,Java都是一般,大同小异,面向对象基础先谈谈类的构造,编写,属性和方法的可见性等等 1.定义类,创建和使用对象 #定义类 class Student(obje ...

  2. 6、Maven仓库

    在Maven的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程.jar文件,library jar文件,插件或者任何其他的工程指定的文件 Maven仓库有三种类型 本地(local) ...

  3. 20180923-WebService

    什么是webservice?    什么是远程调用技术?答:系统和系统之间的调用,从远程系统当中获取业务数据.    Webservice是web服务,他是用http传输SOAP协议数据的一种远程调用 ...

  4. 【PAT甲级】1072 Gas Station (30 分)(Dijkstra)

    题意: 输入四个正整数N,M,K,D(N<=1000,M<=10,K<=10000)分别表示房屋个数,加油站个数,路径条数和加油站最远服务距离,接着输入K行每行包括一条路的两条边和距 ...

  5. Java面向对象封装优化2_构造方法

    1. 类 package cn.itcast.day06.demo05; /* 一个标准的类通常要拥有下面四个组成部分: 1. 所有的成员变量都要使用private关键字修饰 2. 为每一个成员变量编 ...

  6. 【C语言】(数组方式)求n名同学的平均成绩

    原理就不说了 代码: #include <stdio.h> int main() { ], sum = ; int i; printf("请输入5名童鞋的成绩:\n") ...

  7. 用python计算一条射线到两个平面的交点

    前两天,一个朋友找我(半个程序猿)用python帮他写数学模型,当时的我直接是懵逼的,当听到三维啥的时候,整个人就好了,最终在周末花了3个小时把逻辑理了一遍,给小伙伴一个满意的答复了,话不多说,我来整 ...

  8. 【Android】数据存储和访问

    一.SharedPreferences 2.SQLite

  9. ThinkPHP的介绍和安装

    8月6号开始学ThinkPHP了,看的是赵桐正老师的视频,.以及要去看了5集,初步感觉此框架还不错,就是要记忆哪些函数的用法感觉不太好.无论如何,既然要学了,就要遵从这个.在此,将学习时的一些笔记贴上 ...

  10. toFixed的坑

    因为项目需要使用小数,所以第一时间想到了javaScript 的toFixed 方法,开始测试了一下,觉得没有问题就没管了,后来同事偶然间发现 toFixed 之后的数据不对,后来自己查阅资料才知道, ...