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 ...
随机推荐
- Flask SocketIO 实现动态绘图
Flask-SocketIO 是基于 Flask 的一个扩展,用于简化在 Flask 应用中集成 WebSocket 功能.WebSocket 是一种在客户端和服务器之间实现实时双向通信的协议,常用于 ...
- Windows风格的个人网盘,支持文档在线编辑
这是一个Windows页面风格的个人网盘,支持普通文本.文档.表格.xmind等在线编辑,支持Windows的小组件,例如计算器.WhiteBoard.python 等,其他更多功能待你来发现,也待你 ...
- 海上液化天然气 LNG 终端 | 图扑数字孪生
关于 LNG 液化天然气 (Liquefied Natural Gas,简称 LNG) 在能源转型过程中被广泛认可为相对较清洁的能源选择. 相对于传统的煤炭和石油燃料,LNG 的燃烧过程产生的二氧化碳 ...
- python、numpy计算不同文档下的词的TF-IDF值以及进行文档相似度匹配(实战)
TF-IDF 计算公式(一个词的 tf-idf 值在不同文档,它的值也不同): 1.根据已有的原始数据,只展示了前5片文档,content是文档内容,s_words是通过jieba分词将文档划分成了若 ...
- vue3在父子组件使用v-model双向绑定
父组件: <script setup> import InputBox from "@/compon/InputBox.vue"; import {ref} from ...
- NC65元数据添加七彩版时注意点
元数据添加七彩版时注意点 元数据七彩版模式 --- 主要添加Xml文件调整格式 添加时注意点如下 手动创建Panel时 自动生成的实现方法中有一个方法的返回值一定要为true 该方法主要是控制显不显示 ...
- 复现YOLO5所遇到的问题
一. 解决方案: 由于没有影响模型继续运行,理解为简单的warning.根据查询问题,推断是由于 pytorch和torchvision的版本原因导致的. 二. 解决方案: 由于没有影响模型继续运行, ...
- MySQL运维实战(1.3)安装部署:源码编译安装
作者:俊达 引言 在大多数情况下,我们不需要自己编译MySQL源码,因为编译的MySQL和二进制包的内容基本一致.然而,有些特殊情况可能需要我们采用源码编译的方式安装MySQL: 安装非标准版本的My ...
- MySQL|MySQL事物以及隔离级别
MySQL 事务主要用于处理操作量大,复杂度高的数据.比如开单,需要添加给订单表增加记录,还需要增加订单的各种相关明细,操作复杂度高,这些操作语句需要构成一个事务.在 MySQL 命令行的默认设置下, ...
- P5179 Fraction 题解
题目描述 给你四个正整数 \(a,\,b,\,c,\,d\) ,求一个最简分数 \(\frac{p}{q}\) 满足 \(\frac{a}{b} < \frac{p}{q} < \frac ...