[UER#6 C]逃跑

做法

要求的是方差,实际就是求所有情况下经过不同位置的个数和以及经过不同位置的平方和,设为ddd2
一共有四种方向向量,任意走法对应一种向量序列。
先预处理W(i,x,y)W(i,x,y)表示长度为ii,和为(x,y)的向量序列有多少种。
如何求dd,当然是很简单的。
每个坐标显然可以独立统计贡献,我们希望在每个坐标第一次被走到时统计到它。
我们设g[i]表示长度为ii,且不存在1ji满足前jj个向量前缀和为(0,0)
以后这种类似的情况简单称为“不存在前缀(0,0)(0,0)”。
显然可以容斥:
g[i]=(w1+w2+w3+w4)iij=1W(j,0,0)g[ij]g[i]=(w1+w2+w3+w4)i−∑j=1iW(j,0,0)∗g[i−j]
那么就有
d=ni=0(x,y)W(i,x,y)g[ni]d=∑i=0n∑(x,y)W(i,x,y)∗g[n−i]
在时刻ii我们走到了(x,y),之后再也没有再走到过。
为了简单计算,我们更改d2d2的含义,对于一种情况,对于两个不同的位置(有序)如果都到达过,给d2d2贡献11。那么原本的d2等于新的d2d222加上d
类似的我们设出R(i,x,y)R(i,x,y)表示长度为ii,和为(x,y),不存在前缀(0,0)(0,0)
RR的计算也可以容斥:
R(i,x,y)=W(i,x,y)j=1iW(j,0,0)R(ij,x,y)
然后我们设S(i,x,y)S(i,x,y)表示长度为ii,和为(0,0),且存在前缀(x,y)(x,y)
那么显然
S(i,x,y)=ij=1W(j,x,y)R(ij,x,y)S(i,x,y)=∑j=1iW(j,x,y)∗R(i−j,−x,−y)
有了这几个作辅助,我们可以设F(i,x,y)F(i,x,y)表示长度为ii的所有情况,前j个向量的和(a,b)(a,b)为第一次到达,然后接下来iji−j个向量的和为(x,y)(x,y),且在位置ii时,(a+x,b+y)第一次到达,这样的两个不同位置总数(因此xyxy不为00)。
可能有点绕。
考虑怎么得到它呢?
F(i,x,y)+=j=1ig[j]W(ij,x,y)
这个是(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,b)(a,b)前第一次到达,也可能在第一次到达(a,b)(a,b)后第一次到达。
F(i,x,y)=ij=1g[j]S(ij,x,y)F(i,x,y)−=∑j=1ig[j]∗S(i−j,−x,−y)
如果在第一次到达(a,b)(a,b)之前就到达了(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+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),最后在时刻ii重新回到(a+x,b+y),这中途还重新回过(a,b)(a,b)
F(i,x,y)=ij=1F(j,x,y)(W(ij,0,0)S(ij,x,y))F(i,x,y)−=∑j=1iF(j,x,y)∗(W(i−j,0,0)−S(i−j,−x,−y))
我们考虑第一次到达(a+x,b+y)(a+x,b+y)是在第一次到达(a,b)(a,b)后的不合法方案,注意到上一条式子里我们减掉了第一次到达(a+x,b+y)(a+x,b+y)到时刻ii间重新回过(a,b)的方案,这里为了不减重要减掉这种方案(即S(ij,x,y)S(i−j,−x,−y))。
那么在得到了FF之后,我们很简单就能统计d2
d2=ni=0(a,b)(x,y)F(i,a,b)W(ni,x,y)d2=∑i=0n∑(a,b)∑(x,y)F(i,a,b)∗W(n−i,x,y)
至此,本题解决。时间复杂度O(n4)O(n4)

#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);
}
<think>好的,用户现在遇到了“没有找到uer目录”的问题。首先,我需要确认用户提到的“uer目录”是不是拼写错误,可能是“user”目录,或者特定的项目目录? 用户之前的问题是关于在IDEA中配置Maven,现在突然提到找不到“uer目录”,可能是在配置过程中遇到了路径问题?比如settings.xml中的localRepository路径设置错误,或者用户手动指定的目录不存在? 接下来,我需要考虑用户可能的操作场景。可能是在配置Maven的本地仓库时,指定了一个不存在的路径,或者在项目中使用了一个相对路径,而当前工作目录下没有该目录。也有可能用户误将“user”拼写成了“uer”,导致系统找不到正确的用户目录,比如在Windows中的%USERPROFILE%或Linux/macOS中的~目录。 然后,要分析可能的原因。常见的情况包括:拼写错误、路径不存在、权限问题、环境变量配置错误。需要逐一排查。 用户可能对文件系统结构不太熟悉,特别是不同操作系统下的路径差异。比如,在Windows中用户目录通常是C:\Users\用户名,而Linux/macOS是/home/用户名或/Users/用户名。如果用户在配置文件中使用了绝对路径,但路径中的目录名拼写错误,比如写成了“uer”而不是“user”,就会导致系统找不到目录。 此外,用户在配置Maven的settings.xml时,可能修改了localRepository,指向了一个不存在的路径,或者路径中的某个文件夹名称有误。例如,本应是D:\maven-repo,但写成了D:\maven-rep,或者在Linux下路径中的大小写错误。 还有可能是用户在执行某个命令或脚本时,工作目录不正确,导致相对路径解析错误。例如,脚本中引用了./uer/config,但当前目录下没有uer文件夹。 需要进一步询问用户具体的操作步骤,出现的错误提示全文,以及他们尝试配置的文件或路径的具体内容。但根据现有信息,我应该先假设是拼写错误或路径配置错误,并给出相应的解决方案。 可能的解决步骤包括:检查路径拼写是否正确,确认目录是否存在,手动创建缺失的目录,检查文件或配置中的路径设置,特别是检查是否有“uer”这样的拼写错误。同时,指导用户如何在不同操作系统中查看和导航到正确的用户目录,以及如何正确设置Maven的本地仓库路径。 还要考虑用户可能对命令行操作不熟悉,需要给出具体的命令示例,比如使用mkdir创建目录,或者使用cd命令切换目录。对于权限问题,可能需要指导用户使用sudo或修改目录权限。 最后,提醒用户在进行路径配置时使用绝对路径,并注意操作系统的路径格式差异,避免常见的拼写错误,特别是在配置文件中要仔细检查。</think>### 问题分析:找不到 "uer目录" 的常见原因 1. **拼写错误**:可能将 `user` 误写为 `uer`(常见于英文单词手误) 2. **路径不存在**:系统或项目中实际没有该目录 3. **权限问题**:当前用户无权访问该目录 4. **环境变量配置错误**:如 `%USERPROFILE%` 或 `$HOME` 未正确解析 --- ### 解决方案分步指南 #### 一、验证目录名称拼写 ```bash # Windows(CMD/PowerShell): dir /a:d "C:\Users" # 检查用户目录正确名称 # 正确示例:通常显示 `Administrator`, `Public` 等目录 # Linux/macOS: ls /home/ # 查看用户目录列表 ls /Users/ # macOS 专用路径 ``` > **注意**:Windows 用户目录默认在 `C:\Users`,Linux/macOS 在 `/home` 或 `/Users` --- #### 二、手动创建缺失目录(以Windows为例) 1. **通过文件管理器**: - 右键点击目标位置(如 `C:\`)→ `新建 → 文件夹` → 输入正确名称 `user` 2. **命令行创建**: ```cmd :: 管理员模式运行CMD mkdir C:\user ``` --- #### 三、修复路径引用(开发场景) 1. **Java项目中的路径处理**: ```java // 错误写法(硬编码错误路径) File file = new File("uer/data/config.xml"); // 正确写法(使用系统变量) String userHome = System.getProperty("user.home"); File file = new File(userHome + "/data/config.xml"); ``` 2. **Shell脚本路径修正**: ```bash # 错误示例 cd /uer/app # 修正为 cd /user/app # 或使用变量 cd "$HOME/app" ``` --- #### 四、系统级深度排查 1. **检查环境变量**: ```bash # Windows: echo %USERPROFILE% # 应返回类似 `C:\Users\你的用户名` # Linux/macOS: echo $HOME # 应返回类似 `/home/username` ``` 2. **修复符号链接**(适用于Linux/macOS): ```bash # 若 /uer 应是软链接 sudo ln -s /home/yourname /uer ``` --- ### 关键操作流程图解 ``` 发现错误 → 检查拼写 → 验证路径是否存在 → 存在? → 检查权限 → 修复权限 ↓ 不存在? → 创建目录 → 设置环境变量/修复代码引用 ``` --- ### 附:常见系统用户目录对照表 | 操作系统 | 默认用户目录 | 环境变量 | |----------|----------------------|-------------------| | Windows | `C:\Users\<用户名>` | `%USERPROFILE%` | | Linux | `/home/<用户名>` | `$HOME` | | macOS | `/Users/<用户名>` | `$HOME` | --- > **重要提示**:若涉及**Docker容器**或**虚拟机**,需确保目录映射正确。例如Docker命令应包含: > ```bash > docker run -v /correct/user/path:/container/path ... > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值