【解题报告】Codeforces Round #368 (Div. 2)
来源:互联网 发布:高洛峰2014版php视频 编辑:程序博客网 时间:2024/05/01 06:46
题目链接
A. Brain’s Photos(Codefoeces 707A)
思路
遍历像素块儿,如果发现彩色像素的话题给“图片”就是彩色的,否则就是黑白的。
代码
#include <bits/stdc++.h>using namespace std;bool ok = true;char s[10];int n, m;int main() { scanf("%d%d", &n, &m); for(int i = 0; i < n * m; i++) { scanf("%s", s); if(s[0] == 'C' || s[0] == 'M' || s[0] == 'Y') { ok = false; } } puts(ok ? "#Black&White" : "#Color"); return 0;}
B. Bakery(Codeforces 707B)
思路
最优的情况下,选择的烘培屋和货源地一定是相邻的(若不相邻则一定能找到更优的情况),否则就无解。于是枚举图的边,若当前边所连两点分别是烘焙屋和货源地的话就用边权更新最小值
代码
#include <bits/stdc++.h>using namespace std;struct edge { int u, v, w; edge() {} edge(int u, int v, int w): u(u), v(v), w(w) {} bool operator < (const edge& o) const { return w < o.w; }};const int maxn = 1e5 + 5, maxm = 1e5 + 5;bool f[maxn];int n, m, k, u, v, w, ans;edge edges[maxm];int main() { scanf("%d%d%d", &n, &m, &k); for(int i = 0; i < m; i++) { scanf("%d%d%d", &u, &v, &w); edges[i] = edge(u, v, w); } while(k--) { scanf("%d", &u); f[u] = true; } ans = -1; sort(edges, edges + m); for(int i = 0; i < m; i++) { edge e = edges[i]; if(f[e.u] != f[e.v]) { ans = e.w; break; } } printf("%d\n", ans); return 0;}
C. Pythagorean Triples(Codeforces 707C)
思路
这题只要知道构造勾股数的方式就能解(限于本人的水平,就只能理解到这儿了)。
设
当
当
代码
#include <bits/stdc++.h>using namespace std;long long n;int main() { cin >> n; if(n % 2 == 1) { if(n == 1) { cout << -1; } else { n = (n - 1) / 2; cout << 2 * n * n + 2 * n << ' ' << 2 * n * n + 2 * n + 1; } } else { if(n == 2) { cout << -1; } else { n = n / 2; cout << n * n - 1 << ' ' << n * n + 1; } } cout << endl; return 0;}
D. Persistent Bookcase(Codeforces 707D)
思路
本题的棘手之处在于题目中的第4个操作。在不能改变时间的情况下,状态只能随着时间的推进而转移(一维)。现在可以改变时间,那么状态的转移目的地就不唯一了,也就是说状态的转移会出现分叉。那么状态的转移的图示就从一个数轴变成了一棵树(二维)。如果我们能够构造出这棵树,就能在用
令询问
当然,要在状态转移的过程中计算出书本的数量也并非十分容易的事。关键就在于怎么表示状态。设时刻
代码
#include <bits/stdc++.h>using namespace std;const int maxn = 1010, maxq = 1e5 + 5;bool inv[maxn], B[maxn][maxn];int n, m, q, k, res;int o[maxq], a[maxq], b[maxq], ans[maxq], num[maxn];vector <int> G[maxq];void dfs(int u) { ans[u] = res; for(int i = 0; i < G[u].size(); i++) { int v = G[u][i], x = a[v], y = b[v]; int pnum = num[x]; int pinv = inv[x]; int pB = B[x][y]; int pres = res; if(o[v] == 1 && B[x][y] ^ inv[x] == 0) { B[x][y] ^= 1; num[x]++; res++; } if(o[v] == 2 && B[x][y] ^ inv[x] == 1) { B[x][y] ^= 1; num[x]--; res--; } if(o[v] == 3) { res += m - 2 * num[x]; num[x] = m - num[x]; inv[x] ^= 1; } dfs(v); num[x] = pnum; inv[x] = pinv; B[x][y] = pB; res = pres; }}int main() { scanf("%d%d%d", &n, &m, &q); for(int i = 1; i <= q; i++) { scanf("%d", &o[i]); if(o[i] <= 2) { scanf("%d%d", &a[i], &b[i]); G[i-1].push_back(i); } else if(o[i] == 3) { scanf("%d", &a[i]); G[i-1].push_back(i); } else { scanf("%d", &k); G[k].push_back(i); } } dfs(0); for(int i = 1; i <= q; i++) { printf("%d\n", ans[i]); } return 0;}
(其它题目略)
- 【解题报告】Codeforces Round #368 (Div. 2)
- Codeforces Round #149 (Div. 2)解题报告
- Codeforces Round #180 (Div. 2) 解题报告
- Codeforces Round #190 (Div. 2) 解题报告
- Codeforces Round #191 (Div. 2) 解题报告
- Codeforces Round #189 (Div. 2) 解题报告
- Codeforces Round #142 (Div. 2) 解题报告
- Codeforces Round #229 (Div. 2) 解题报告
- Codeforces Round #241 (Div. 2) 解题报告
- Codeforces Round #262 (Div. 2)解题报告
- Codeforces Round #267 (Div. 2) 解题报告
- Codeforces Round #266 (Div. 2)解题报告
- Codeforces Round #268 (Div. 2) 解题报告
- Codeforces Round #271 (Div. 2) 解题报告
- Codeforces Round #274 (Div. 2) 解题报告
- Codeforces Round #276 (Div. 2) 解题报告
- Codeforces Round #277 (Div. 2) 解题报告
- Codeforces Round #224 (Div. 2)解题报告
- TensorFlow, Keras, TensorLayer, Tflearn 比较
- Easy 226题 Invert Binary Tree
- FIR滤波器设计
- Linux驱动编程day4--实现硬件控制
- Red Hat 6.7 配置使用centos的yum源
- 【解题报告】Codeforces Round #368 (Div. 2)
- 全球参数APN工具代码集成
- 《我的RobotFramework书》1-6 变量, Variable
- maven安装配置
- SELECT单表查询
- EventBus使用详解(一)——初步使用EventBus
- 118-N-Queens II
- 聊聊cpu内存一致性
- 沉浸式模式