比赛链接: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. java笔记——面向对象

    1.概述:面向对象是基于面向过程的编程思想 举例:把大象装进冰箱 2.开发:不断的创建对象,使用对象,指挥对象做事情 3.面向对象特征:封装 , 继承 , 多态 4.类和对象的关系: 类是一组相关的属 ...

  2. 【开源】int,long long去一边去:高精度大合集!

    加法 \(add\) string add(string s1, string s2) { //时间复杂度 O(log n) string res = ""; int c = 0, ...

  3. 学会XPath,轻松抓取网页数据

    一.定义 XPath(XML Path Language)是一种用于在 XML 文档中定位和选择节点的语言.XPath的选择功能非常强大,可以通过简单的路径选择语法,选取文档中的任意节点或节点集.学会 ...

  4. Centos8.4离线安装JDK+Tomcat+MySQL8.0+Nginx

    一.安装JDK 注:以下命令环境在Xshell中进行. 1.查询出系统自带的OpenJDK及版本 rpm -qa | grep jdk 2.如果显示已安装openjdk则对其进行卸载. 输入:rpm ...

  5. RV1126 快速启动

    一.硬件信息 RV1126/RV1109 系列芯⽚内置硬件解压缩模块 -- decom,可以极⼤得提升系统启动速度 RV1126/RV1109 内置⼀个 MCU,MCU 在 SoC 上电后就会快速启动 ...

  6. Scrapy框架架构

    ENGINE:引擎,负责各个组件的管理. SPIDERS:各个爬虫文件类.(我们一般要写的代码就是这个). SCHEDULER:调度器,ENGINE将爬虫任务分发给该组件,由该组件调度爬虫任务. DO ...

  7. Android对接微信登录记录

    Android对接微信登录记录 - Stars-One的杂货小窝 Android项目要对接下微信登录,稍微记录下踩坑点 代码 1.添加依赖 implementation 'com.tencent.mm ...

  8. 如何有效应对员工违规使用U盘的情况?

    在面对员工违规使用U盘的挑战时,华企盾DSC数据防泄密系统提供了一套综合而高效的解决方案. 通过系统的U盘加密功能,我们能够防止未经授权的U盘访问,确保敏感数据不会被非法传输.这一层保护不仅是基础性的 ...

  9. mysql的CRUD操作实现

      插入语句(INSERT):一旦我们选择了要插入的字段,   我们就必须保证要插入的数值和选择的字段的个数,顺序,类型一致. 1:怎么插入一条数据: INSERT INTO 插入的表名称(列名1,列 ...

  10. 9 个让你的 Python 代码更快的小技巧

    哈喽大家好,我是咸鱼 我们经常听到 "Python 太慢了","Python 性能不行"这样的观点.但是,只要掌握一些编程技巧,就能大幅提升 Python 的运 ...