B

模拟,水题

#include<bits/stdc++.h>
using namespace std;
char s1[100005],s2[100005];
int a1[100005],a2[100005],bj;
int main()
{
cin>>s1>>s2;
int len=strlen(s1);
for(int i=0;i<len;i++)
{
a1[i]=s1[i]-97;
a2[i]=s2[i]-97;
}
for(int i=0;i<26;i++)
{
bj=0;
for(int j=0;j<len;j++)
{
a1[j]=(a1[j]+1)%26;
}
for(int j=0;j<len;j++)
{
if(a1[j]!=a2[j])
{
bj=1;
break;
}
}
if(bj==0)
{
cout<<"Yes";
return 0;
}
}
cout<<"No";
}

C

全排列求出P数组的所有可能,邻接矩阵存图,对每个\(P_i\)进行一次判断

#include <bits/stdc++.h>
using namespace std;
int ans[100001],n,m,bj[100001];
int sq1[10][10],sq2[10][10];
struct node
{
int x,y;
}bian[100];
void dfs(int k)
{
int i;
if(k>n)
{
int bz=0;
for(i=1;i<=m;i++)
{
if(sq2[ans[bian[i].x]][ans[bian[i].y]]!=1)
{
return;
}
}
cout<<"Yes";
exit(0);
}
for(i=1;i<=n;i++)
{
if(!bj[i])
{
ans[k]=i;
bj[i]=1;
dfs(k+1);
bj[i]=0;
ans[k]=0;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
sq1[y][x]=1,sq1[x][y]=1;
bian[i].x=x,bian[i].y=y;
}
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
sq2[x][y]=1,sq2[y][x]=1;
}
dfs(1);
cout<<"No";
return 0;
}

D

每个位置(i,j)都可以从(i-1,j)和(i,j-1)走到,因此状态转移方程是\(f_{i,j}=f_{i-1,j}+f_{i,j-1}\),但当(i-1,j)或(i,j-1)有墙时就不能通过,

所以需要进行特判

#include<bits/stdc++.h>
using namespace std;
int ans,n,m,dp[1005][1005],bj[101][101],maxn;
char c[1005][1005];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",c[i]+1);
}
dp[1][1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(c[i][j]=='#'||(dp[i-1][j]==0&&dp[i][j-1]==0))//判断是否有墙
{
continue;
}
dp[i][j]=max(dp[i][j],max(dp[i-1][j],dp[i][j-1])+1);
ans=max(ans,dp[i][j]);
}
}
cout<<ans;
}

E

DP题

设\(x[K][1]\)表示上下移动\(K\)次达到了\((x2,y2)\),

\(x[K][0]\)表示上下移动\(K\)次没达到\((x2,y2)\),

\(y[K][1]\)表示左右移动\(K\)次达到了\((x2,y2)\),

\(y[K][0]\)表示左右移动\(K\)次没达到\((x2,y2)\),

那么我们就可以得到状态转移方程

\(x[i][1]\):第\(i\)步到达了,那么\(i-1\)步一定是没有到达的,因为不可以静止不动

\(x[i][1]=x[i-1][0]\)

\(x[i][0]\):第\(i\)步没有到达,那么第\(i-1\)步可以分为没有到达与到达

如果第\(i-1\)步没有到达\(X[i-1][0]\) 又因为第i步也没有达到所以第\(i\)步有\(h-2\)种选择(不能是终点和不动)

如果第\(i-1\)步到达了 \(X[i-1][1]\) 又因为第i步也没有达到所以第\(i\)步有\(h-1\)种选择(不能不动)

\(X[i][0]=X[i-1][0]*(h-2)+X[i-1][1]*(h-1)\)

另一个数组也是同理

\(Y[i][1]=Y[i-1][0]\)

\(Y[i][0]=Y[i-1][0]*(w-2)+Y[i-1][1]*(w-1)\)

当\(x1==x2\)的时候\(X\)在第0步的时候就已经到达终点即\(X[0][1]=1\)

否则\(X[0][0]=1\)

当\(y1==y2\)的时候\(Y\)在第0步的时候就已经到达终点即\(Y[0][1]=1\)

否则\(Y[0][0]=1\)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353
ll X[1000010][2],Y[1000010][2];
ll jc[1000010],inv[1000010];
ll n,m,k,x1,Y1,x2,y2;
ll qmi(ll a,ll b,ll p)
{
if(!a)return 0;
a%=p;
ll res=1;
while(b)
{
if(b&1)res=res*a%p;
a=a*a%p;
b>>=1;
}
return res;
}
ll C(ll a,ll b)
{
if(a<b)return 0;
return jc[a]*inv[b]%mod*inv[a-b]%mod;
}
int main()
{
cin>>n>>m>>k;
cin>>x1>>Y1>>x2>>y2;
X[0][x1==x2]=1;
Y[0][Y1==y2]=1;
for(ll i=1;i<=k;i++)
{
X[i][1]=X[i-1][0];
X[i][0]=(X[i-1][0]*(n-2)%mod+X[i-1][1]*(n-1)%mod)%mod;
Y[i][1]=Y[i-1][0];
Y[i][0]=(Y[i-1][0]*(m-2)%mod+Y[i-1][1]*(m-1)%mod)%mod;
}
jc[0]=inv[0]=1;
for (ll i=1;i<1000010;i++)
{
jc[i]=jc[i-1]*i%mod;
inv[i]=inv[i-1]*qmi(i,mod-2,mod)%mod;
}
ll res=0;
for(ll i=0;i<=k;i++)
{
ll t=C(k,i)*X[i][1]%mod*Y[k-i][1]%mod;//组合数算答案,给x分配i步,y就是k-i步,还要乘一个C(k,i)
res=(res+t)%mod;
}
cout<<res<<endl;
}

atcoder ABC 232 B~E题解的更多相关文章

  1. AtCoder ABC 242 题解

    AtCoder ABC 242 题解 A T-shirt 排名前 \(A\) 可得 T-shirt 排名 \([A+1,B]\) 中随机选 \(C\) 个得 T-shirt 给出排名 \(X\) ,求 ...

  2. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  3. ATCODER ABC 099

    ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...

  4. Atcoder ABC 141

    Atcoder ABC 141 A - Weather Prediction SB题啊,不讲. #include<iostream> #include<cstdio> #inc ...

  5. Atcoder ABC 139E

    Atcoder ABC 139E 题意: n支球队大循环赛,每支队伍一天只能打一场,求最少几天能打完. 解法: 考虑抽象图论模型,既然一天只能打一场,那么就把每一支球队和它需要交手的球队连边. 求出拓 ...

  6. Atcoder ABC 139D

    Atcoder ABC 139D 解法: 等差数列求和公式,记得开 $ long long $ CODE: #include<iostream> #include<cstdio> ...

  7. Atcoder ABC 139C

    Atcoder ABC 139C 题意: 有 $ n $ 个正方形,选择一个起始位置,使得从这个位置向右的小于等于这个正方形的高度的数量最多. 解法: 简单递推. CODE: #include< ...

  8. Atcoder ABC 139B

    Atcoder ABC 139B 题意: 一开始有1个插口,你的插排有 $ a $ 个插口,你需要 $ b $ 个插口,问你最少需要多少个插排. 解法: 暴力模拟. CODE: #include< ...

  9. Atcoder ABC 139A

    Atcoder ABC 139A 题意: 给你两个字符串,记录对应位置字符相同的个数 $ (n=3) $ 解法: 暴力枚举. CODE: #include<iostream> #inclu ...

随机推荐

  1. Linux中的RCU机制

    什么是RCU? RCU(Read-Copy Update),顾名思义就是读-拷贝-修改,它是基于其原理命名的.对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝 ...

  2. 基于mybatis的java代码生成存储过程

    问题: 项目中目前使用mybatis操作数据库,使用插件(mybatis-generator)自动生成代码,对于增改查,使用存储过程实现了一版本,方便使用. insert代码生成器用法: insert ...

  3. Linux-流程控制语法-函数-属组

    1.流程控制 1.1 条件选择 1.1.1选择执行if语句 格式: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ] ... ...

  4. Linux 实现静态路由实验

    环境: 四台主机: A主机:eth0 NAT模式 R1主机:eth0 NAT模式,eth1 仅主机模式 R2主机:eth0 桥接模式,eth1仅主机模式 B主机:eth0 桥接模式 手动修改IP地址 ...

  5. epoll 函数解析

    本文参考社长的 TinyWebServer 庖丁解牛 epoll 常用API epoll_create 函数 #include <sys/epoll.h> int epoll_create ...

  6. HMS Core分析服务助您掌握用户分层密码,实现整体收益提升

    随着市场愈发成熟,开发者从平衡收益和风险的角度开始逐步探索混合变现的优势,内购+广告就是目前市场上混合变现的主要方式之一. 对于混合变现模式,您是否有这样的困惑: 如何判断哪些用户更愿意看广告.哪些用 ...

  7. linux下虚拟环境venv的创建与使用以及virtualenvwrapper

    1.linux安装学习python虚拟环境 linux提供的虚拟环境工具 有virtualenv pipenv 2.我们需求是在linux上可以运行 一个django2 运行一个django1 3.安 ...

  8. [数学基础] 4 欧几里得算法&扩展欧几里得算法

    欧几里得算法 欧几里得算法基于的性质: 若\(d|a, a|b\),则\(d|(ax+by)\) \((a,b)=(b,a~mod~b)\) 第二条性质证明: \(\because a~mod~b=a ...

  9. RocketMq 完整部署

    目录 RocketMq 部署 环境 物理机部署 自定义日志目录 自定义参数和数据存放位置 服务启动 启动name server 启动broker 关停服务 尝试发送消息 常见报错 部署 rockerm ...

  10. Chrome 中的自动播放政策

    官方策略说明 Autoplay policy in Chrome 修改本机浏览器设置 修改 chrome 设置允许自动播放声音 electron 允许自动播放声音 issues/13525 具体就是这 ...