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. GO语言学习——切片三 append()方法为切片添加元素、切片的扩容策略、使用copy()函数复制切片、从切片中删除元素

    append()方法为切片添加元素 注意:通过var声明的零值切片可以在append()函数直接使用,无需初始化. var s []int s = append(s, 1, 2, 3) append( ...

  2. 看 AWS 如何通过 Nitro System 构建竞争优势

    目录 目录 目录 前言 Amazon Nitro System Overview AWS EC2 的虚拟化技术演进之路 Nitro Hypervisor Nitro Cards Nitro Contr ...

  3. 以rem为单位,数值较小,border-radius:50%部分浏览器渲染不圆方法

    元素使用rem做单位且较小时,对于border-radius:50%在部分浏览器不圆解决方法: 1.将原来宽高扩大至两倍(.1rem --> .2rem),再使用transform:scale( ...

  4. ASCII&Base64

    ASCII https://zh.wikipedia.org/wiki/ASCII American Standard Code for Information Interchange,美国信息交换标 ...

  5. Java获取特定区间随机数及产生不重复随机数

    问题 有这样一种需求,在这样一个数组中String[] arr = new String[]{"电商", "互联网", "小程序", &qu ...

  6. 基于Proxmox平台搭建3D云教室

    背景 本文介绍了在 Proxmox VE 虚拟化平台上使用NVIDIA A16 GPU,开启vGPU特性,利用DoraCloud 搭建3D云教室的方案. Proxmox virtualization ...

  7. java 5种IO模型

    每日一句 人的痛苦会把自己折磨到多深呢? 每日一句 You cannot swim for new horizons until you have courage to lose sight of t ...

  8. 换个角度带你学C语言的基本数据类型

    摘要: C语言的基本数据类型,大家从学生时代就开始学习了,但是又有多少人会试图从底层的角度去学习呢?这篇文章会用一问一答的形式,慢慢解析相关的内容和困惑. 本文分享自华为云社区<从深入理解底层的 ...

  9. 队列的java实现

    今天老师提出一个问题,就是如何用java实现队列呢?我在网上找了许多资料,发现java也是可以很轻松的实现队列. 如下代码: package com; import java.util.Collect ...

  10. django框架11

    内容概要 用户登录之后跳转到用户登录之前想要访问的页面 django操作cookie补充 django操作session django操作session补充 CBV添加装饰器 django中间件 自定 ...