做法

要求的是方差,实际就是求所有情况下经过不同位置的个数和以及经过不同位置的平方和,设为ddd和d2" role="presentation" style="position: relative;">d2d2d2。
一共有四种方向向量,任意走法对应一种向量序列。
先预处理W(i,x,y)W(i,x,y)W(i,x,y)表示长度为iii,和为(x,y)" role="presentation" style="position: relative;">(x,y)(x,y)(x,y)的向量序列有多少种。
如何求ddd,当然是很简单的。
每个坐标显然可以独立统计贡献,我们希望在每个坐标第一次被走到时统计到它。
我们设g[i]" role="presentation" style="position: relative;">g[i]g[i]g[i]表示长度为iii,且不存在1≤j≤i" role="presentation" style="position: relative;">1≤j≤i1≤j≤i1\le j\le i满足前jjj个向量前缀和为(0,0)" role="presentation" style="position: relative;">(0,0)(0,0)(0,0)。
以后这种类似的情况简单称为“不存在前缀(0,0)(0,0)(0,0)”。
显然可以容斥:
g[i]=(w1+w2+w3+w4)i−∑ij=1W(j,0,0)∗g[i−j]g[i]=(w1+w2+w3+w4)i−∑j=1iW(j,0,0)∗g[i−j]g[i]=(w1+w2+w3+w4)^i-\sum_{j=1}^iW(j,0,0)*g[i-j]
那么就有
d=∑ni=0∑(x,y)W(i,x,y)∗g[n−i]d=∑i=0n∑(x,y)W(i,x,y)∗g[n−i]d=\sum_{i=0}^n\sum_{(x,y)}W(i,x,y)*g[n-i]
在时刻iii我们走到了(x,y)" role="presentation" style="position: relative;">(x,y)(x,y)(x,y),之后再也没有再走到过。
为了简单计算,我们更改d2d2d2的含义,对于一种情况,对于两个不同的位置(有序)如果都到达过,给d2d2d2贡献111。那么原本的d2" role="presentation" style="position: relative;">d2d2d2等于新的d2d2d2乘222加上d" role="presentation" style="position: relative;">ddd。
类似的我们设出R(i,x,y)R(i,x,y)R(i,x,y)表示长度为iii,和为(x,y)" role="presentation" style="position: relative;">(x,y)(x,y)(x,y),不存在前缀(0,0)(0,0)(0,0)。
RRR的计算也可以容斥:
R(i,x,y)=W(i,x,y)−∑j=1iW(j,0,0)∗R(i−j,x,y)" role="presentation" style="position: relative;">R(i,x,y)=W(i,x,y)−∑ij=1W(j,0,0)∗R(i−j,x,y)R(i,x,y)=W(i,x,y)−∑j=1iW(j,0,0)∗R(i−j,x,y)R(i,x,y)=W(i,x,y)-\sum_{j=1}^iW(j,0,0)*R(i-j,x,y)
然后我们设S(i,x,y)S(i,x,y)S(i,x,y)表示长度为iii,和为(0,0)" role="presentation" style="position: relative;">(0,0)(0,0)(0,0),且存在前缀(x,y)(x,y)(x,y)。
那么显然
S(i,x,y)=∑ij=1W(j,x,y)∗R(i−j,−x,−y)S(i,x,y)=∑j=1iW(j,x,y)∗R(i−j,−x,−y)S(i,x,y)=\sum_{j=1}^iW(j,x,y)*R(i-j,-x,-y)
有了这几个作辅助,我们可以设F(i,x,y)F(i,x,y)F(i,x,y)表示长度为iii的所有情况,前j" role="presentation" style="position: relative;">jjj个向量的和(a,b)(a,b)(a,b)为第一次到达,然后接下来i−ji−ji-j个向量的和为(x,y)(x,y)(x,y),且在位置iii时,(a+x,b+y)" role="presentation" style="position: relative;">(a+x,b+y)(a+x,b+y)(a+x,b+y)第一次到达,这样的两个不同位置总数(因此xyxyxy不为000)。
可能有点绕。
考虑怎么得到它呢?
F(i,x,y)+=∑j=1ig[j]∗W(i−j,x,y)" role="presentation" style="position: relative;">F(i,x,y)+=∑ij=1g[j]∗W(i−j,x,y)F(i,x,y)+=∑j=1ig[j]∗W(i−j,x,y)F(i,x,y)+=\sum_{j=1}^ig[j]*W(i-j,x,y)
这个是(a,b)(a,b)(a,b)是第一次到达的总方案数。
考虑不合法的情况,即(a,b)(a,b)(a,b)到达(a+x,b+y)(a+x,b+y)(a+x,b+y)后,这个(a+x,b+y)(a+x,b+y)(a+x,b+y)已经不是第一次到达了,它可能在第一次到达(a,b)(a,b)(a,b)前第一次到达,也可能在第一次到达(a,b)(a,b)(a,b)后第一次到达。
F(i,x,y)−=∑ij=1g[j]∗S(i−j,−x,−y)F(i,x,y)−=∑j=1ig[j]∗S(i−j,−x,−y)F(i,x,y)-=\sum_{j=1}^ig[j]*S(i-j,-x,-y)
如果在第一次到达(a,b)(a,b)(a,b)之前就到达了(a+x,b+y)(a+x,b+y)(a+x,b+y),考虑去掉这种方案,那么相当于第一次到达(a+x,b+y)(a+x,b+y)(a+x,b+y)后又走了回来,而且这途中要经过(a,b)(a,b)(a,b)。这样一定包含了所有第一次到达(a,b)(a,b)(a,b)之前就到达了(a+x,b+y)(a+x,b+y)(a+x,b+y)的方案,但是并不止。我们中途去遍历了(a,b)(a,b)(a,b),但是并不一定中途遍历时这个(a,b)(a,b)(a,b)才第一次经过。因此我们还会减掉第一次到达(a,b)(a,b)(a,b)后,再第一次到达(a+x,b+y)(a+x,b+y)(a+x,b+y),最后在时刻iii重新回到(a+x,b+y)" role="presentation" style="position: relative;">(a+x,b+y)(a+x,b+y)(a+x,b+y),这中途还重新回过(a,b)(a,b)(a,b)。
F(i,x,y)−=∑ij=1F(j,x,y)∗(W(i−j,0,0)−S(i−j,−x,−y))F(i,x,y)−=∑j=1iF(j,x,y)∗(W(i−j,0,0)−S(i−j,−x,−y))F(i,x,y)-=\sum_{j=1}^iF(j,x,y)*(W(i-j,0,0)-S(i-j,-x,-y))
我们考虑第一次到达(a+x,b+y)(a+x,b+y)(a+x,b+y)是在第一次到达(a,b)(a,b)(a,b)后的不合法方案,注意到上一条式子里我们减掉了第一次到达(a+x,b+y)(a+x,b+y)(a+x,b+y)到时刻iii间重新回过(a,b)" role="presentation" style="position: relative;">(a,b)(a,b)(a,b)的方案,这里为了不减重要减掉这种方案(即S(i−j,−x,−y)S(i−j,−x,−y)S(i-j,-x,-y))。
那么在得到了FFF之后,我们很简单就能统计d2" role="presentation" style="position: relative;">d2d2d2。
d2=∑ni=0∑(a,b)∑(x,y)F(i,a,b)∗W(n−i,x,y)d2=∑i=0n∑(a,b)∑(x,y)F(i,a,b)∗W(n−i,x,y)d2=\sum_{i=0}^n\sum_{(a,b)}\sum_{(x,y)}F(i,a,b)*W(n-i,x,y)
至此,本题解决。时间复杂度O(n4)O(n4)O(n^4)。

#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fd(i,a,b) for(i=a;i>=b;i--)
using namespace std;
typedef long long ll;
const int maxn=220+10,mo=998244353;
int w[5],dx[5]={0,0,0,1,-1},dy[5]={0,-1,1,0,0};
int p1[maxn][maxn][maxn],p2[maxn][maxn][maxn],p3[maxn][maxn][maxn],p4[maxn][maxn][maxn];
int g[maxn];
int i,j,k,l,r,s,t,n,m,x,y,ans,all,d,d2;
int &W(int n,int x,int y){ return p1[x+105][y+105][n]; }
int &F(int n,int x,int y){ return p2[x+105][y+105][n]; }
int &S(int n,int x,int y){ return p3[x+105][y+105][n]; }
int &R(int n,int x,int y){ return p4[x+105][y+105][n]; }
int abs(int x){return x<0?-x:x;
}
int main(){scanf("%d",&n);fo(i,1,4) scanf("%d",&w[i]);W(0,0,0)=1;fo(i,1,n)fo(x,-n,n)fo(y,-n,n)if (abs(x)+abs(y)<=i)fo(k,1,4)(W(i,x,y)+=(ll)w[k]*W(i-1,x+dx[k],y+dy[k])%mo)%=mo;g[0]=1;all=w[1]+w[2]+w[3]+w[4];t=1;fo(i,1,n){t=(ll)t*all%mo;g[i]=t;fo(j,1,i) (g[i]-=(ll)W(j,0,0)*g[i-j]%mo)%=mo;}fo(i,1,n)fo(x,-n,n)fo(y,-n,n)if (abs(x)+abs(y)<=i){R(i,x,y)=W(i,x,y);fo(j,1,i-abs(x)-abs(y))(R(i,x,y)-=(ll)W(j,0,0)*R(i-j,x,y)%mo)%=mo;}fo(i,1,n)fo(x,-n,n)fo(y,-n,n)if (abs(x)+abs(y)<=i){fo(j,max(abs(x)+abs(y),1),i-abs(x)-abs(y))(S(i,x,y)+=(ll)W(j,x,y)*R(i-j,-x,-y)%mo)%=mo;}fo(i,1,n)fo(x,-n,n)fo(y,-n,n)if (abs(x)+abs(y)<=i){if (!x&&!y) continue;fo(j,max(abs(x)+abs(y),1),i)(F(i,x,y)+=(ll)(W(j,x,y)-S(j,x,y))*g[i-j]%mo)%=mo;fo(j,1,i)(F(i,x,y)-=(ll)(W(j,0,0)-S(j,x,y))*F(i-j,x,y)%mo)%=mo;}fo(i,0,n)fo(x,-n,n)fo(y,-n,n)if (abs(x)+abs(y)<=i) (d+=(ll)W(i,x,y)*g[n-i]%mo)%=mo;fo(i,0,n){t=0;fo(x,-n,n)fo(y,-n,n)if ((x||y)&&abs(x)+abs(y)<=n-i) (t+=F(n-i,x,y))%=mo;fo(x,-n,n)fo(y,-n,n)if (abs(x)+abs(y)<=i) (d2+=(ll)t*W(i,x,y)%mo)%=mo;}d2=((ll)d2*2%mo+d)%mo;t=1;fo(i,1,n) t=(ll)t*all%mo;ans=((ll)d2*t%mo-(ll)d*d%mo)%mo;(ans+=mo)%=mo;printf("%d\n",ans);
}

[UER#6 C]逃跑相关推荐

  1. Plan To Do

    计划 把9.65上的专题学一波 CDQ分治 刷题- 要做的题 一级 有空就做 [JZOJ 3333]文明5 [UER #6]寻找罪犯 [JZOJ 4100][GDOI2015]覆盖半径 [JZOJ 4 ...

  2. [UER #6]逃跑

    逃跑 题解 首先根据期望的线性性,我们可以将方差的期望转化成平方的期望减去期望的平方. E((x−E(x))2)=E(x2−2xE(x)+E2(x))=E(x2)−2E(x)E(x)+E2(x)=E( ...

  3. c语言删除文件中的数据_第20问:删除了数据文件,该往哪个方向逃跑

    问题 我写错了脚本,ibd 文件被删除了,该往哪个方向逃跑? 实验 先来建一个测试库: 我们在这里开启了 innodb_file_per_table,但这个参数并非本实验所必须,只是为了演示方便. 然 ...

  4. code vs 1026 逃跑的拉尔夫

    1026 逃跑的拉尔夫  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但 ...

  5. pytorch微调bert_北大、人大联合开源工具箱UER,3 行代码完美复现BERT、GPT

    本文由AI研习社用户张正投稿,来稿见文末联系方式 作者 | 张正 单位 | 清华大学 编辑 | Camel 现存的预训练模型中没有一种可以完美的适用于所有任务,这也给预训练模型的选择带来困难. 对于这 ...

  6. 【贪心】逃跑(jzoj 1748)

    逃跑 jzoj 1748 题目大意 你有一个能量值l,在接下来的n天里,你每天有两个选择: 1.增加l个食物 2.使l加一, 你第i天要吃ai个a_i个ai​个食物,如果吃不到就会死掉,现在问你n天后 ...

  7. 逃跑吧少年服务器临时维护中,逃跑吧少年—逃跑吧少年5月30日更新 主动技能解锁...

    逃跑吧少年-逃跑吧少年5月30日更新 主动技能解锁 发表时间: 2019-05-31     作者:7k7k 电脑版<逃跑吧!少年>服务器将于5月30日9:00-11:00进行服务器维护工 ...

  8. c语言逃跑的蠕虫函数,源码指标:穿越5线 第一时间吃鱼身 上行末端逃跑 没有未来函数 通达信幅图 精品公式...

    原标题:源码指标:穿越5线 第一时间吃鱼身 上行末端逃跑 没有未来函数 通达信幅图 精品公式 大盘技术周日发 7月新的:石盘铁蛋! 5线穿越副图:通达信源码 没有未来函数 使用说明:如果个股走强的特点 ...

  9. 逃跑吧少年辅助快乐羊儿吧

    逃跑吧少年是4399刚刚推出的一款小游戏,收到热烈欢迎,绝对的高热度2d刺激小游戏. 同时我还发过一个帖子不过被CSDN删掉了,所以我来这里我自己的博客重新发一遍! 下载地址:点我下载(点击后会跳转到 ...

最新文章

  1. centos7 安装Git
  2. 自学python有哪些方向-Python新手入门应该注意的一些问题以及学习方向
  3. python——装饰器
  4. css3的新特性transform,transition,animation
  5. Spring系列教程八: Spring实现事务的两种方式
  6. 随机森林分类器_建立您的第一个随机森林分类器
  7. react dispatch_梳理下redux、mobx 在react的应用
  8. 2000-2021年款雷克萨斯原厂全套维修手册+电路图资料下载
  9. PDF文件解密安全口令
  10. JBoss,Geronimo还是Tomcat?——三种开源Java应用服务器的比较
  11. 计算机中输入法切换用户,如何在计算机中切换输入法
  12. C# LINQ标准查询操作符
  13. Verilog练习:HDLBits笔记15
  14. win10 升级到21H1 后Thinkpad X系列本本 音频驱动 没有声音
  15. Spark之sbt安装
  16. 著名数学家龚升的论述揭示高中“函数近代严格定义” 有非常明显错误
  17. 微擎的人人商城是如何对接微信支付的?
  18. 必学的Linux指令
  19. GICv3软件overview手册之GICv3基本功能(5)
  20. 《麻省理工科技评论》发布2019全球十大突破性技术 阿里巴巴成唯一上榜中国公司

热门文章

  1. zoom 用法 flex zoom
  2. cad快速选择命令快捷键_CAD快捷键命令:倒角的使用技巧
  3. Codeforces Round #439 (Div. 2) E. The Untended Antiquity 二维线段树||二维树状数组
  4. 绘图软件教程(2)coreldraw12图层的使用与DXF文件的导出
  5. shp文件纯前端的上传、解析、编辑、下载
  6. 关于短信内容格式及压缩方法
  7. 21 C++ 长度单位转换
  8. 【Java】文件管理器
  9. 荣耀手机装联通卡显示无服务器,荣耀X10用不了物联网卡(联通物联卡3g却不能上网)...
  10. 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))