Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)
A. Optimal Currency Exchange
枚举一下就行了。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, a, b;
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n >> a >> b; b *= 5;
int ans = n;
for(int x = 1; x * b <= n; ++x) {
ans = min(ans, (n - x * b) % a);
}
for(int x = 1; x * a <= n; ++x) {
ans = min(ans, (n - x * a) % b);
}
cout << ans;
return 0;
}
B. Badges
同样也是枚举,注意边界情况。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int b, g, n;
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> b >> g >> n;
int mn = min(b, g);
int mx = max(g, b);
int ans = 0;
for(int i = mn; ~i; i--) {
int j = n - i;
if(j <= mx && j >= 0) ans++ ;
}
cout << ans;
return 0;
}
C. Bad Sequence
水题,有很多做法,最简单的做法就是维护一个类似前缀和的形式,题目的条件就相当于在任何一个位置,')'的数量不会比'('的数量多1。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 200005;
int n;
char s[N];
char q[N];
int main() {
ios::sync_with_stdio(false); cin.tie(0);
// freopen("input.in", "r", stdin);
cin >> n >> s + 1;
int l = 1, r = 0;
for(int i = 1; i <= n; i++) {
if(l > r) q[++r] = s[i];
else {
if(s[i] == ')' && q[r] == '(') {
--r;
} else q[++r] = s[i];
}
}
int len = r - l + 1;
int f = 1;
if(len == 2) {
if(q[l] == ')' && q[r] == '(') {}
else f = 0;
} else if(len == 0) {}
else f = 0;
if(f) cout << "YES";
else cout << "NO";
return 0;
}
D. Treasure Island
题意:
给出一个\(n*m\)的网格图,现在要堵住一些点,使得从\((1,1)\)出发,每次只能向右走或者向下走,到不了\((n,m)\)。
问最少需要堵住多少点。
思路:
很显然答案不会大于\(2\)。那么我们就只需要判断答案是否可能为\(0,1\)就行。
- 考虑直接bfs,从起点出发一次,从终点出发一次。
- 合理性?
- 首先\(0\)的情况很好判断,我们就只需要判断答案是否有可能为\(1\);
- 假设网格图中存在一个点为必经点,那么可以观察到该点的左下部分和右上部分从两端点出发都不能同时到达。
然而我比赛时写得代码很丑陋= =其实点直接映射就好,写起来很方便;同时\(bfs\)也可以直接用循环代替。
Code
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define MP make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e6 + 5;
int n, m;
char s[N];
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
bool ok(int x, int y) {
return x >= 1 && x <= n && y >= 1 && y <= m;
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n >> m;
vector <vector <int> > a(n + 3), b(n + 3), c(n + 3), sum(n + 3);
vector <vector <vector <int> >> d(2);
for(int i = 0; i < 2; i++) {
d[i].resize(n + 3);
}
for(int i = 0; i <= n + 1; i++) {
d[0][i].resize(m + 3, INF);
d[1][i].resize(m + 3, INF);
}
for(int i = 0; i <= n + 1; i++)
a[i].resize(m + 3), b[i].resize(m + 3, 0), c[i].resize(m + 3, 0), sum[i].resize(m + 3, 0);
for(int i = 1; i <= n; i++) {
cin >> s + 1;
for(int j = 1; j <= m; j++) {
if(s[j] == '.') a[i][j] = 0;
else a[i][j] = 1;
}
}
vector <vector<int> > vis;
vis.resize(n + 2);
for(int i = 1; i <= n; i++) vis[i].resize(m + 2, 0);
queue <pii> q;
q.push(MP(1, 1));
vis[1][1] = 1; d[0][1][1] = 0;
while(!q.empty()) {
pii cur = q.front(); q.pop();
for(int i = 0; i < 2; i++) {
int curx = cur.fi + dx[i], cury = cur.se + dy[i];
if(ok(curx, cury) && !vis[curx][cury] && a[curx][cury] == 0) {
vis[curx][cury] = 1;
d[0][curx][cury] = d[0][cur.fi][cur.se] + 1;
q.push(MP(curx, cury));
}
}
}
if(d[0][n][m] == INF) {
cout << 0; return 0;
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) vis[i][j] = 0;
}
q.push(MP(n, m));
vis[n][m] = 1; d[1][n][m] = 0;
while(!q.empty()) {
pii cur = q.front(); q.pop();
for(int i = 2; i < 4; i++) {
int curx = cur.fi + dx[i], cury = cur.se + dy[i];
if(ok(curx, cury) && !vis[curx][cury] && a[curx][cury] == 0) {
vis[curx][cury] = 1;
d[1][curx][cury] = d[1][cur.fi][cur.se] + 1;
q.push(MP(curx, cury));
}
}
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(a[i][j]) continue;
sum[i][j] = d[0][i][j] + d[1][i][j];
if(sum[i][j] >= INF) sum[i][j] = 0;
}
}
for(int i = n; i; i--) {
for(int j = 1; j <= m; j++) {
b[i][j] = b[i + 1][j] + b[i][j - 1] - b[i + 1][j - 1] + sum[i][j];
}
}
for(int i = 1; i <= n; i++) {
for(int j = m; j; j--) {
c[i][j] = c[i - 1][j] + c[i][j + 1] - c[i - 1][j + 1] + sum[i][j];
}
}
int ans = 2;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if((i == 1 && j == 1) || (i == n && j == m)) continue;
// if(a[i][j] == 0 && b[min(i + 1, n)][max(j - 1, 1)] == 0 && c[max(i - 1, 1)][min(j + 1, m)] == 0) {
// ans = 1;
// }
if(a[i][j] == 0 && b[i + 1][j - 1] == 0 && c[i - 1][j + 1] == 0) ans = 1;
}
}
cout << ans;
return 0;
}
E. Petya and Construction Set
题意:
构造一颗\(2n\)个结点的树,满足\(2i,2i-1\)两个结点的距离为\(d_i,d_i\leq n\),\(d_i\)会给出。
思路:
(结点看成\(n\)个,想了一个假题)
- 注意到一个点只与与它配对的点有关。
- 考虑将这颗树构造成一条链+一些分支的形式。
- 首先我们构造一条长度为\(n\)的链,链上的结点为奇数结点,接下来我们要放偶数结点;
- 注意到任何长度的点,我们都可以搞一个分支出来。
- 但是,万一长度大于链的长度怎么办?
- 那直接将链长度加\(1\)即可,同时,我们可以按\(d_i\)降序的顺序来加边,这样可以方便很多。
细节见代码吧:
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
int n;
int d[N];
vector <int> g[N];
struct edge{
int u, v, w;
bool operator < (const edge &A) const {
return w > A.w;
}
}a[N];
int p[N];
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) {
int u = 2 * i - 1, v = 2 * i;
cin >> d[i];
a[i] = {u, v, d[i]};
}
sort(a + 1, a + n + 1);
int MAX = n;
auto add = [&](int u, int v) {
g[u].push_back(v);
};
for(int i = 1; i <= n; i++) p[i] = a[i].u;
// for(int i = 1; i <= n; i++) cout << p[i] << ' ';
// cout << '\n';
for(int i = 1; i <= n; i++) {
if(i + a[i].w == MAX + 1) p[++MAX] = a[i].v;
add(p[i + a[i].w - 1], a[i].v);
if(i > 1) add(p[i - 1], p[i]);
}
for(int i = 1; i <= 2 * n; i++) {
for(auto it : g[i]) cout << i << ' ' << it << '\n';
}
return 0;
}
Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)的更多相关文章
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
- Educational Codeforces Round 39 (Rated for Div. 2) G
Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...
- Educational Codeforces Round 48 (Rated for Div. 2) CD题解
Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...
- Educational Codeforces Round 60 (Rated for Div. 2) 题解
Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...
随机推荐
- Pick of the Week'19 | 图数据库 Nebula 第 47 周看点-- insert 的二三事
每周五 Nebula 为你播报每周看点,每周看点由本周大事件.用户问答.Nebula 产品动态和推荐阅读构成. 今天是 2019 年第 47 个工作周的周五,来和 Nebula 看看本周有什么图数据库 ...
- SpringMVC框架之第三篇
2.高级参数绑定(重点) 2.1.数组类型 数组类型的参数可以传递一批相同的数据到Controller的方法中. 2.1.1.需求 批量删除:在商品列表页面选中多个商品,然后删除. 2.1.2.需求分 ...
- Nginx日志常见时间变量解析
$request_time 官方解释:request processing time in seconds with a milliseconds resolution; time elapsed b ...
- August 18th, 2019. Week 34th, Sunday
Fear doesn't shut you down, it wakes you up. 恐惧不会消磨你的意志,它能激发你的潜能. We all know that fear is powerful, ...
- weblogic解决jar包冲突
前言 在项目中利用POI开发excel.word的导入导出功能,而POI在解析xlsx及docx两种高版本文档时需要依赖xmlbeans包,但weblogic容器中提供了低版本的xmlbeans,从而 ...
- 【CentOS 7】CentOS 7各个版本镜像下载地址(转)
参考链接:https://www.centos.org/download/mirrors/ https://www.cnblogs.com/defineconst/p/11176593.html
- 10. Go 语言反射
Go 语言反射 反射是指在程序运行期对程序本身进行访问和修改的能力.程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分.在运行程序时,程序无法获取自身的信息. 支持反射的语言可以在 ...
- Django生命周期
以下信息是个人理解所得,如要转载,请注明转载处! 生命周期?很多人会问生命周期是什么?Django也有生命周期吗?他就是一个框架呀. 我们先来说一说一个西瓜的生命周期,一个西瓜刚开始只是一个种子,种到 ...
- [译]Vulkan教程(13)图形管道基础之Shader模块
[译]Vulkan教程(13)图形管道基础之Shader模块 Shader modules Unlike earlier APIs, shader code in Vulkan has to be s ...
- 一文了解 Consistent Hash
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/LGLqEOlGExKob8xEXXWckQ作者:钱幸川 在分布式环境下面,我们经常会通过一定的 ...