【解题报告】Codeforces Round #360 (Div. 2)
来源:互联网 发布:淘宝违法规则大全2016 编辑:程序博客网 时间:2024/05/10 14:32
题目链接
A. Opponents(Codeforces 688A)
思路
用
代码
#include <bits/stdc++.h>using namespace std;const int maxd = 110;int n, d, cnt[maxd];string s;int main() { cin >> n >> d; for(int i = 0; i < d; i++) { cin >> s; for(int j = 0; j < s.size(); j++) { if(s[j] == '0') { cnt[i] = 1; break; } } } for(int i = 1; i < d; i++) { if(cnt[i-1] > 0 && cnt[i] > 0) { cnt[i] += cnt[i-1]; } } cout << (*max_element(cnt, cnt + d)) << endl; return 0;}
B. Lovely Palindromes(Codeforces 688B)
思路
第
代码
#include <bits/stdc++.h>using namespace std;const int maxn = 1e6;char s[maxn], t[maxn];int n;int main() { scanf("%s", s); n = strlen(s); for(int i = 0; i < n; i++) { t[i] = s[n-i-1]; } t[n] = '\0'; strcat(s, t); printf("%s\n", s); return 0;}
C. NP-Hard Problem(Codeforces 688C)
思路
题目要我们求图
代码
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 10;bool ok = true;int n, m, u, v, color[maxn];vector <int> v1, v2, G[maxn];// color[u]的值为1和2分别代表为u涂上两种不同的颜色void dfs(int u, int c) { for(int i = 0; i < G[u].size(); i++) { int v = G[u][i]; // 如果下一个点没涂过色的话,为其涂上不同的颜色 if(color[v] == 0) { color[v] = c ^ 3; dfs(v, c ^ 3); } // 如果下一个点跟当前点颜色相同的话,失败返回 if(color[v] == c) { ok = false; return; } }}int main() { scanf("%d%d", &n, &m); for(int i = 0; i < m; i++) { scanf("%d%d", &u, &v); G[u].push_back(v); G[v].push_back(u); } // 为每个连通分量涂色 for(int i = 1; i <= n; i++) { if(color[i] == 0) { color[i] = 1; dfs(i, 1); } } // 输出失败或A和B if(ok == false) { puts("-1"); } else { for(int i = 1; i <= n; i++) { if(color[i] == 1) { v1.push_back(i); } if(color[i] == 2) { v2.push_back(i); } } printf("%d\n", v1.size()); for(int i = 0; i < v1.size(); i++) { printf("%d ", v1[i]); } printf("\n%d\n", v2.size()); for(int i = 0; i < v2.size(); i++) { printf("%d ", v2[i]); } puts(""); } return 0;}
D. Remainders Game(Codeforces 688D)
思路
要解决这题,必须先了解一个叫做“中国剩余定理”的定理。定理的内容如下:
设
则同余方程组
在模M下有唯一的整数解x。
反过来在本题中,若想得出
(被模数n与小标n为不同的数,虽然题目存在歧义,但是这里仍按照题目的规定)
考虑题给条件,若
为此,现将
若 对任意
而上面加粗字体语句的充要条件是
因此本题输出
代码
#include <bits/stdc++.h>using namespace std;long long n, k, a, lcm;int main() { scanf("%I64d%I64d", &n, &k); lcm = 1; while(n--) { scanf("%I64d", &a); lcm = a * lcm / __gcd(a, lcm); lcm %= k; } puts(lcm ? "No" : "Yes"); return 0;}
E. The Values You Can Make(Codeforces 688E)
思路
若只求有几种恰好组成
一种显然的思路是先搜索出一个满足条件的硬币子集
将
代码
#include <bits/stdc++.h>using namespace std;const int maxn = 505, maxk = 505;int n, m, a, ans, d[maxk][maxk];int main() { scanf("%d%d", &n, &m); d[0][0] = 1; while(n--) { scanf("%d", &a); for(int i = m; i >= a; i--) { for(int j = 0; j <= m; j++) { d[i][j] |= d[i-a][j]; d[i][j] |= (j < a ? 0 : d[i-a][j-a]); } } } for(int j = 0; j <= m; j++) { ans += d[m][j]; } printf("%d\n", ans); for(int j = 0; j <= m; j++) { if(d[m][j] == 1) { printf("%d ", j); } } puts(""); return 0;}
- 【解题报告】Codeforces Round #360 (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)解题报告
- 编译原理 核心理论基础-摘自清华大学编译原理第3版
- property和constructor-arg的使用
- [转载]有向图的最小生成树,最小树形图
- JAVA中的URI,URL,URN(转)
- PD003-NET通用后台系统
- 【解题报告】Codeforces Round #360 (Div. 2)
- leetcode 148. Sort List
- ulimit命令
- 项目管理概述
- 读书笔记之《暗店街》
- 频率分辨率
- centos下sublime2/3不能输入中文的问题
- 正则表达式必知必会(修订版)整理教程
- opencv不同版本官方安装包说明