AtCoder Beginner Contest 211 (C ~ E) 个人题解
比赛链接: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) 个人题解的更多相关文章
- [题解] Atcoder Beginner Contest ABC 270 G Ex 题解
点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...
- AtCoder Beginner Contest 178 E - Dist Max 题解(推公式)
题目链接 题目大意 给你n个点(n<=2e5)要你求所有点中两个点最短的曼哈顿距离 曼哈顿距离定义为d(i,j)=|x1-x2|+|y1-y2|. 题目思路 想了很久也没有什么思路,其实就是一个 ...
- 【AtCoder Beginner Contest 181】A~F题解
越学越菜系列 于2020.11.2,我绿了(错乱) A - Heavy Rotation 签到题,奇数Black,偶数White. code: #include<bits/stdc++.h> ...
- AtCoder Beginner Contest 154 题解
人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...
- AtCoder Beginner Contest 153 题解
目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...
- AtCoder Beginner Contest 177 题解
AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- AtCoder Beginner Contest 184 题解
AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...
- AtCoder Beginner Contest 173 题解
AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...
- AtCoder Beginner Contest 172 题解
AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...
随机推荐
- 如何在langchain中对大模型的输出进行格式化
简介 我们知道在大语言模型中, 不管模型的能力有多强大,他的输入和输出基本上都是文本格式的,文本格式的输入输出虽然对人来说非常的友好,但是如果我们想要进行一些结构化处理的话还是会有一点点的不方便. 不 ...
- 超详细的Mysql锁 实战分析,你想知道的都在这里~
1.mysql回表查询 在这里提起主要是用于说明mysql数据和索引的结构,有助于理解后续加锁过程中的一些问题. mysql索引结构和表数据结构是相互独立的,根据索引查询,只能找到索引列和主键聚簇索引 ...
- 地图选择器datav怎么使用?
DataV 是一款基于阿里云的数据可视化产品,它提供了丰富的组件和功能,其中包括地图选择器.下面是一个详细的介绍: 1. 了解 DataV: - DataV 是一款强大的数据可视化工具,能够帮助用户将 ...
- STM32外设:信号转换器 ADC、DAC
主要外设: ADC:Analog to Digital Converter 模数转换器 DAC:Digital to Analog Converter 数模转换器 ADC_IN` 主要功能:测外部引脚 ...
- 【笔记整理】xpath复习
又是xpath.... 10年前学java就学过了...哈哈哈 要就看w3cschool的教程就行了, 函数部分会用得到: https://www.w3school.com.cn/xpath/xpat ...
- ElasticSearch之线程的数量
ElasticSearch在运行过程中,涉及多种线程池.线程的使用,因此而需要给予足够的线程资源,保证ElasticSearch在需要时可以正常创建出线程. 查看Linux系统当前用户允许创建的线程的 ...
- 2023-12-30:用go语言,给你一个下标从 0 开始的整数数组 nums ,它包含 n 个 互不相同 的正整数, 如果 nums 的一个排列满足以下条件,我们称它是一个特别的排列。 对于 0 <
2023-12-30:用go语言,给你一个下标从 0 开始的整数数组 nums ,它包含 n 个 互不相同 的正整数, 如果 nums 的一个排列满足以下条件,我们称它是一个特别的排列. 对于 0 & ...
- @Value是个什么东西
对注解不了解的可以看一下: Java注解,看完就会用 首先我们要明确: @Value 是 Spring 框架的注解. 它有什么作用呢? 作用 @Value 通过注解将常量.配置文件中的值.其他bean ...
- 谷歌浏览器输入地址后http自动转https解决方法
谷歌浏览器输入地址后http自动转https解决方法 https://blog.csdn.net/qq_51563725/article/details/133691727
- 屎山代码风格指南(避免被优化&&避免被接盘)
欢迎补充!!! 序言 良好的代码结构:Bad 使用有意义的变量和函数名,遵循命名规范,使代码易于理解. 组织代码,使用适当的文件和文件夹结构,保持模块化. 避免全局变量的滥用,尽量使用局部作用域. 单 ...