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 ...
随机推荐
- binary hacks读数笔记(装载)
1.地址空间 在linux系统中,每个进程拥有自己独立的虚拟地址空间,这个虚拟地址空间的大小是由计算机硬件决定的,具体地说,是由CPU的位数决定的.比如,32位硬件平台决定的虚拟地址空间大小:0--2 ...
- 基于FFmpeg的Dxva2硬解码及Direct3D显示(一)
目录 前言 名词解释 代码实现逻辑 前言 关于视频软解码的资料网上比较多了,但是关于硬解可供参考的资料非常之有限,虽然总得来说软解和硬解的基本逻辑一样,但是实现细节上的差别还是比较多的.虽然目前功能已 ...
- centos7安装数据库 (系统包含预装环境mariadb)
查看系统是否安装了MySQL,有些没安装但是有路径,那是因为系统安装了mariadb-libs,对应的配置文件目录:/etc/my.cnf(下面就根据mariadb来安装mysql) 查看系统预装ma ...
- python之路《五》字符串的操作
python的里的字符串的操作是可以说是最常见也是最实用的 我们通常使用双引号来表示字符串" "创建字符串很简单,定义一个变量就可以了 1 name = 'my name \t i ...
- fastapi+vue搭建免费代理IP网站部署至heroku
说明 最近需要用到一些HTTP的代理,用于爬虫去爬取信息,搜索了一些网站,貌似现在这类提供免费代理IP的网站很多,刚好最近看了点vue的视频,弄个网站练练. 部署到heroku,预览地址:点击这里 F ...
- Network_01
(从实践中学习TCP/IP协议读书笔记) 准备工作: 安装Kali Linux系统: 在VMWare中安装,选Debian 8.x 64bit,ISO镜像地址,在下载完镜像后,在VMWare中把镜像挂 ...
- 下载器Folx怎么安装使用
应该使用哪个下载工具?这个如果是Windows上会有无数答案的问题,在Mac上却变得异常的纠结.比如Leech和Aria2,这两款软件,前者功能相对比较简单,后者的配置又稍微有点复杂,很难找到一款相对 ...
- Matlab 条件循环函数
条件判断 if 表达式 语句 elseif 表达式 语句 -. else 语句 end 这个与c语言不同的就是 1:要多一个end 2:还有没有括号 3:else if连在一起 for 循环 for ...
- redis new
redis cluster 数据结构 geo,heperloglog 3个非核心dict:阻塞dict,非阻塞dict,watch dict 3个bio线程,生产者消费者模式,主线程生产者: 1.la ...
- CentOS 使用文件增加Swap空间
使用硬盘文件增加swap空间 ///创建文件 dd if=/dev/zero of=/SWAP/swapfile bs=1M count=1000 ///格式化 mkswap /SWAP/swapfi ...