比赛链接:Here

A、B题跳过

C - chokudai

题意:

给出一个字符串,问有多少个字串能构成 chokudai


这道题算是一个简单DP,只要计算某个位置对构成 chokudai 的贡献值即可

\(f[j] = f[j] + f[j - 1]\ if\ s[i] == t[j]\)

\(f[0] = 1\)

const int mod = 1e9 + 7;
ll f[10] = {1};
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
string s, t = " chokudai";
cin >> s;
int n = s.length();
for (int i = 0; i < n; ++i)
for (int j = 1; j <= 8; ++j)
if (s[i] == t[j]) f[j] = (f[j] + f[j - 1]) % mod;
cout << f[8] % mod;
}

D - Number of Shortest paths

题意:

高桥王国有 \(n\) 个城市和 \(m\) 个双向道路

请问有多少条最短路径能从城市 \(1\) 走到城市 \(n\)


简单跑一下BFS,同时维护各个城市到城市\(1\) 的最短情况,用DP维护路径数

const int N = 2e5 + 10;
const int mod = 1e9 + 7;
vector<int>e[N];
int dp[N], dist[N];
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
memset(dist, -1, sizeof(dist));
int n, m;
cin >> n >> m;
for (int i = 1, a, b; i <= m; ++i) {
cin >> a >> b;
e[a].push_back(b);
e[b].push_back(a);
}
queue<int>q;
dist[1] = 0, dp[1] = 1, q.push(1);
while (q.size()) {
int u = q.front(); q.pop();
for (int v : e[u]) {
if (dist[v] == -1) {
dp[v] = dp[u];
dist[v] = dist[u] + 1;
q.push(v);
} else if (dist[u] + 1 == dist[v]) dp[v] = (dp[v] + dp[u]) % mod;
}
}
cout << dp[n];
}

E - Red Polyomino


\(N\times N\) 个方格中的K个方格的选择数是 \(C_{N^2}^k\) ,由于 \(C_64^8 = 4426165368 > 4e9\) ,因此直接暴力是不可能的了。

但是,由于红色方块相互连接,我们可以预测满足条件的组合数量很少。

所以可以跑枚举红色方块连接模式的 DFS(深度优先搜索)就足够了。

using ull = unsigned long long;
int n, k, ans;
char s[10][10];
set<ull>mp;
ull S; bool check(int x, int y) {
if (s[x][y] == '#' || (S & 1ull << (x * n + y))) return false;
if (x > 0 and (S & 1ull << ((x - 1) * n + y))) return true;
if (x < n - 1 and (S & 1ull << ((x + 1) * n + y))) return true;
if (y > 0 and (S & 1ull << (x * n + y - 1))) return true;
if (y < n - 1 and (S & 1ull << (x * n + y + 1))) return true;
return false;
} void dfs(int d) {
if (mp.find(S) != mp.end())return ;
mp.insert(S);
if (d == k) {ans++; return ;}
for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) {
if (check(i, j)) {
S ^= (1ull << (i * n + j));
dfs(d + 1);
S ^= (1ull << (i * n + j));
}
}
} int main() {
//cin.tie(nullptr)->sync_with_stdio(false); // 需注释,cin 与 scanf 冲突
cin >> n >> k;
for (int i = 0; i < n; ++i) scanf("%s", s[i]);
for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) {
if (s[i][j] != '#') {
S ^= (1ull << (i * n + j));
dfs(1);
S ^= (1ull << (i * n + j));
}
}
cout << ans << "\n";
}

AtCoder Beginner Contest 211 (C ~ E) 个人题解的更多相关文章

  1. [题解] Atcoder Beginner Contest ABC 270 G Ex 题解

    点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...

  2. AtCoder Beginner Contest 178 E - Dist Max 题解(推公式)

    题目链接 题目大意 给你n个点(n<=2e5)要你求所有点中两个点最短的曼哈顿距离 曼哈顿距离定义为d(i,j)=|x1-x2|+|y1-y2|. 题目思路 想了很久也没有什么思路,其实就是一个 ...

  3. 【AtCoder Beginner Contest 181】A~F题解

    越学越菜系列 于2020.11.2,我绿了(错乱) A - Heavy Rotation 签到题,奇数Black,偶数White. code: #include<bits/stdc++.h> ...

  4. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  5. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

  6. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

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

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

  8. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  9. AtCoder Beginner Contest 173 题解

    AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...

  10. AtCoder Beginner Contest 172 题解

    AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...

随机推荐

  1. 一篇文章带你掌握Web自动化测试工具——Selenium

    一篇文章带你掌握Web自动化测试工具--Selenium 在这篇文章中我们将会介绍Web自动化测试工具Selenium 如果我们需要学习相关内容,我们需要掌握Python,PyTest以及部分前端知识 ...

  2. 大白话说Python+Flask入门(六)Flask SQLAlchemy操作mysql数据库

    写在前面 这篇文章被搁置真的太久了,不知不觉拖到了周三了,当然,也算跟falsk系列说再见的时候,真没什么好神秘的,就是个数据库操作,就大家都知道的CRUD吧. Flask SQLAlchemy的使用 ...

  3. [AI]大模型稳定角色扮演形成“自我认知”

    引言 自我身份认知是人类重要的认知能力之一,它决定着个体在社会中的定位以及与他人的互动方式.了解自我身份认知形成的机理对心理学和认知科学研究具有重要意义.传统上,人类自我认知一直被视为一个个体内在形成 ...

  4. [ABC244G] Construct Good Path

    Problem Statement You are given a simple connected undirected graph with $N$ vertices and $M$ edges. ...

  5. Url参数解析组装工具类

    import org.apache.commons.lang3.StringUtils; import java.util.HashMap; import java.util.Map; /** * @ ...

  6. SpringBoot设置日志级别

    输出到控制台 logging: # 日志记录到文件中 file: # 指定文件名 name: server.log logback: rollingpolicy: # 指定文件大小 max-file- ...

  7. finally中的代码一定会执行吗?

    通常在面试中,只要是疑问句一般答案都是"否定"的,因为如果是"确定"和"正常"的,那面试官就没有必要再问了嘛,而今天这道题的答案也是符合这个 ...

  8. idea2020.1.3汉化包报错问题

    已解决:idea2020.1.3汉化包报错问题 问题描述:插件市场提供的版本不对.不兼容,所以需要手动下载安装 这里附上文件 https://wwsi.lanzouq.com/b03czdtwf 密码 ...

  9. 单位换算详解:bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算

    当谈论计算机存储和数据传输时,"bit"(比特)和"Byte"(字节)是两个常见的术语,它们具有不同的含义和用途. 位(bit):"位"来自 ...

  10. libGDX游戏开发之弹窗(五)

    libGDX游戏开发之弹窗(五) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和google找 ...