Codeforces Edu Round 58 A-E
A. Minimum Integer
- 如果\(d < l\),则\(d\)满足条件
- 否则,输出\(d * (r / d + 1)\)即可。
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
int T; scanf("%d", &T);
while(T--){
int l, r, d; scanf("%d%d%d", &l, &r, &d);
if(d < l) printf("%d\n", d);
else printf("%d\n", d * (r / d + 1));
}
return 0;
}
B. Accordion
找到头尾的\([:\)和\(:]\),然后统计中间有几个\(|\)即可。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int N = 500010;
int n;
char s[N];
int main(){
scanf("%s", s + 1);
n = strlen(s + 1);
int l = 1, r = n, cnt = 0;
while(l <= n && s[l] != '[') l++;
while(r && s[r] != ']') r--;
while(l <= n && s[l] != ':') l++;
while(r && s[r] != ':') r--;
if(l >= r) puts("-1");
else{
for(int i = l; i <= r; i++)
if(s[i] == '|') cnt++;
printf("%d\n", 4 + cnt);
}
return 0;
}
C. Division and Union
发现可以竖着一条线将所有线分开成两部分,则两边任意选都可以。那么我们就可以找到这个条线。把线段按左端点排序,每次如果有交集就合并,没有交集,我们就找到了一个"断点"。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
const int N = 100010;
int n, l[N], r[N];
PII a[N];
int main(){
int T; scanf("%d", &T);
while(T--){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d%d", l + i, r + i);
a[i].first = l[i];
a[i].second = r[i];
}
sort(a + 1, a + 1 + n);
int rr = a[1].second, loc = 0;
for(int i = 2; i <= n; i++){
if(a[i].first <= rr)
rr = max(rr, a[i].second);
else { loc = rr; break; }
}
if(!loc) printf("-1");
else for(int i = 1; i <= n; i++)
if(r[i] <= rr) printf("1 ");
else printf("2 ");
puts("");
}
return 0;
}
D. GCD Counting
树形\(dp\),\(100000\)以内的每个数因子不超过\(256\)个(最多\(2 ^ 3 * 3 * 5 * 7 * 9 * 13 * 19 > 100000\))
首先把每个读入的权值质因数分解,两个数必须有质因子\(gcd\)才不会$ = 1\(。存在一条边\)(u, v)\(,若\)u\(和\)v$之间有相同的质因子则可以合并,但注意下一次合并必须也有这个质因子...
所以设计\(f[i][j]\)为\(i\)个点为根节点,以第\(j\)个质因子为保障的最大长度。更新显然,如果遇到新的更新,答案可以更新,现在的 + 可以更新的。
所以... 虽然看似会炸掉,但是还是卡过了...
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
const int N = 200010;
int n, a[N], ans = 1;
vector<int> G[N], p[N], f[N];
bool success = true;
void dfs(int u, int last){
for(int i = 0; i < G[u].size(); i++){
int v = G[u][i];
if(v == last) continue;
dfs(v, u);
for(int j = 0; j < p[u].size(); j++){
for(int k = 0; k < p[v].size(); k++){
if(p[u][j] == p[v][k]){
ans = max(ans, f[u][j] + f[v][k]);
f[u][j] = max(f[u][j], f[v][k] + 1);
}
}
}
}
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", a + i);
if(a[i] != 1) success = false;
int x = a[i];
for(int j = 2; j * j <= a[i]; j++){
if(x % j == 0){
p[i].push_back(j);
f[i].push_back(1);
while(x % j == 0) x /= j;
}
}
if(x > 1) p[i].push_back(x), f[i].push_back(1);
}
for(int i = 1; i < n; i++){
int u, v; scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
if(success) puts("0");
else{
dfs(1, 0);
printf("%d", ans);
}
return 0;
}
E. Polycarp's New Job
两者都符合交换律,所以我们交换使得:
让\(x <= y\),\(h <= w\)。
维护\(x\)和\(y\)的最大值,\(max\_x\)和\(max\_y\)
检查$max_x <= h $ \(\&\&\) \(max\_y <= w\)即可。
显然,如果符合$max_y <= h $ \(\&\&\) \(max\_x <= w\),那么前者显然必然成立:
如果不符合,前者也有可能成立。
#include <cstdio>
#include <iostream>
using namespace std;
const int N = 500010;
int n, a = 0, b = 0;
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
char ch; cin >> ch;
if(ch == '+'){
int x, y; scanf("%d%d", &x, &y);
if(x > y) swap(x, y);
a = max(a, x);
b = max(b, y);
}else{
int h, w; scanf("%d%d", &h, &w);
if(h > w) swap(h, w);
if(a <= h && b <= w) puts("YES");
else puts("NO");
}
}
return 0;
}
Codeforces Edu Round 58 A-E的更多相关文章
- Codeforces Educational round 58
Ediv2 58 随手AK.jpg D 裸的虚树,在这里就不写了 E 傻逼贪心?这个题过的比$B$都多.jpg #include <cstdio> #include <algorit ...
- Educational Codeforces Round 58 (Rated for Div. 2) 题解
Educational Codeforces Round 58 (Rated for Div. 2) 题目总链接:https://codeforces.com/contest/1101 A. Min ...
- Codeforces Beta Round #54 (Div. 2)
Codeforces Beta Round #54 (Div. 2) http://codeforces.com/contest/58 A 找子序列 #include<bits/stdc++.h ...
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- Codeforces Beta Round #62 题解【ABCD】
Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #13 C. Sequence (DP)
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...
- CodeForces Global Round 1
CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...
- Codeforces Global Round 1 - D. Jongmah(动态规划)
Problem Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...
随机推荐
- 模拟鼠标操作(ActionChains)(转 侵删)
在日常的测试中,经常会遇到需要鼠标去操作的一些事情,比如说悬浮菜单.拖动验证码等,这一节我们来学习如何使用webdriver模拟鼠标的操作 首页模拟鼠标的操作要首先引入ActionChains的包 f ...
- Python_Tips_dump\load 和 dumps\loads 的区别与联系
dump\load 和 dumps\loads 的区别与联系 """ Python3 JSON模块的使用 参考链接:https://docs.python.org/3/ ...
- 结合实战和源码来聊聊Java中的SPI机制?
写在前面 SPI机制能够非常方便的为某个接口动态指定其实现类,在某种程度上,这也是某些框架具有高度可扩展性的基础.今天,我们就从源码级别深入探讨下Java中的SPI机制. 注:文章已收录到:https ...
- 算法:矩阵连乘(Java)动态规划
Description 给你2个矩阵A.B,我们使用标准的矩阵相乘定义C=AB如下: A数组中栏(column)的数目一定要等于B数组中列(row)的数目才可以做此2数组的相乘.若我们以rows(A) ...
- FairyGUI编辑器的和unity里的Obj对应关系
1.在FairyGUI官网上下载好unity的工程,用FairyGUI编辑器打开它的官方案例 2.在FairyGUI编辑器和Unity中,从一个最简单的示例"Bag"着手. ...
- webug第十二关:我系统密码忘记了!
第十二关:我系统密码忘记了! 文件上传 直接上传php一句话, 菜刀链接
- 思维导图iMindMap能够对逻辑思维有什么帮助
思维就像人的身体一样,只有更多的锻炼才能更加灵活,思维导图可以很好的锻炼我们的思维,包括发散思维.图像思维.系统思维.条理性思维.主次思维和空间思维等.快给你的的思维报一个思维导图强化班吧. 为什么导 ...
- FL studio系列教程(十三):如何在FL Studio步进音序器中制作节奏
了解了FL Studio一些操作功能后,我们就要去用这些操作功能完成我们想要的作品.所以今天小编就来带领大家在FL Studio的步进音序器中制作出简单的节奏,与此同时大家也会了解到通道的几个基础功能 ...
- mock模拟接口返回数据
mock,是python中模拟接口返回数据 1.安装 pip install mock import unittest from mock import Mock def add(a,b): pass ...
- 精尽MyBatis源码分析 - MyBatis-Spring 源码分析
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...