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 ...
随机推荐
- 随机森林(Random Forest)--- 转载
1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来 ...
- 洛谷4055 [JSOI2009]游戏(二分图博弈)
例题:在N×M的迷宫中有一个棋子,小 AA 首先任意选择棋子放置的位置.然后,小 YY 和小 AA 轮流将棋子移动到相邻的格子里.游戏的规则规定,在一次游戏中,同一个格子不能进入两次,且不能将棋子移动 ...
- The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission,iphone手机video标签报错
The request is not allowed by the user agent or the platform in the current context, possibly becaus ...
- .NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能
前言 前段时间有同学在微信群里提问,要使用.NET开发一个简单的爬虫功能但是没有做过无从下手.今天给大家推荐一个轻量.灵活.高性能.跨平台的分布式网络爬虫框架(可以帮助 .NET 工程师快速的完成爬虫 ...
- Ubuntu 22.04 LTS 安装lnmp
Ubuntu 22.04 LTS 安装最新稳定版本nginx.mysql5.7和php7.2 全部apt-get安装,就是快,迅速.前提是需要在有网络环境的情况下哈!! 操作系统版本:Ubuntu 2 ...
- ROW_NUMBER 开窗函数优化方案(Oracle && PostgreSQL 性能比对)
帮朋友优化一条很简单的窗口函数 ROW_NUMBER() OVER() , Oracle 迁移 PostgreSQL项目. 原始SQL和执行计划 STUDENT_BAK 表我模拟的数据,3千万行数据. ...
- C++ Qt开发:TreeWidget 树形选择组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TreeWid ...
- MySQL运维实战(1.3)安装部署:源码编译安装
作者:俊达 引言 在大多数情况下,我们不需要自己编译MySQL源码,因为编译的MySQL和二进制包的内容基本一致.然而,有些特殊情况可能需要我们采用源码编译的方式安装MySQL: 安装非标准版本的My ...
- libGDX游戏开发之菜单界面(四)
libGDX游戏开发之菜单界面(四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和googl ...
- 从Bitcask存储模型谈超轻量级KV系统设计与实现
Bitcask介绍 Bitcask是一种"基于日志结构的哈希表"(A Log-Structured Hash Table for Fast Key/Value Data) Bitc ...