CF-551:部分题目总结
题目链接:http://codeforces.com/contest/1153
A .Serval and Bus
pro:给出n种公交车的首班车时间和两班车之间的时间间隔,找t时间以后的第一辆车是第几种车
sol:对于每种车,找到t时间以后的第一班车的时间,计算这个时间和t的差距,然后找离t最近的
- 暴力
#include "bits/stdc++.h"
using namespace std;
const int MAXN = ;
const int INF = 0x3f3f3f3f;
int ans, k = INF;
int main() {
int n, t, a, b, c;
scanf("%d%d", &n, &t);
for (int i = ; i <= n; i++) {
scanf("%d%d", &a, &b);
if (a >= t) {
c = a - t;
} else {
c = ((a - t) % b + b) % b;
}
if (c < k) {
k = c;
ans = i;
}
}
printf("%d\n", ans);
return ;
}最后一个取余忘了,然后就被hack......甚是无语
B .Serval and Toy Bricks
pro:给出三视图每一列的高度,俯视图有点特殊,只有0或1,求俯视图每一格的高度
sol:结果不唯一,对于俯视图每一格,找到对应的左视图和前视图,取其中高度小的就必能配成正确的俯视图
- 贪心
#include "bits/stdc++.h"
using namespace std;
const int MAXN = ;
int mp[MAXN][MAXN];
int f[MAXN], l[MAXN];
int main() {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
for (int i = ; i <= m; i++)
scanf("%d", &f[i]);
for (int i = ; i <= n; i++)
scanf("%d", &l[i]);
for (int i = ; i <= n; i++) {
for (int j = ; j <= m; j++) {
scanf("%d", &mp[i][j]);
if (mp[i][j]) mp[i][j] = min(f[j], l[i]);
}
}
for (int i = ; i <= n; i++) {
for (int j = ; j <= m; j++)
printf("%d ", mp[i][j]);
puts("");
}
return ;
}
C .Serval and Parenthesis Sequence
pro:给出一个括号串,其中一部分被用'?'代替,补全括号串,使得括号串除自身以外每个前缀串都不是合法括号串,但是自身是合法括号串,若无法补全,输出":(";
sol:还是贪心,因为要补成合法括号串,所以左括号个数为(|s| / 2)个,从左往右扫,遇到'?'如果能补左括号就补左括号,补不了左括号再补右括号,如果还没到末尾就合法了,输出":(",如果到末尾还不是合法括号串,也输出":(",否则输出补好的串。CF贪心的题好多啊
- 贪心
#include "bits/stdc++.h"
using namespace std;
const int MAXN = 3e5 + ;
char s[MAXN];
int n, k, l;
int main() {
scanf("%d%s", &n, &s);
k = n >> ;
for (int i = ; i < n; i++)
if (s[i] == '(') k--;
for (int i = ; i < n; i++) {
if (s[i] == '?') {
if (k > ) {
s[i] = '(';
k--;
} else {
s[i] = ')';
}
}
}
for (int i = ; i < n - ; i++) {
if (s[i] == '(') {
l++;
} else {
l--;
}
if (l <= ) {
puts(":(");
return ;
}
}
if (s[n - ] == ')') {
l--;
} else {
l++;
}
if (l == ) {
puts(s);
} else {
puts(":(");
}
return ;
}
D . Serval and Rooted Tree
pro:给出一棵树,除叶子节点外每个节点有一个属性,0表示该节点的值等于子节点中最大值,1表示该节点的值等于子节点中最小值,将1到k填入k个子节点,使得根节点值最大。
sol:树形dp + dfs,dfs(i) 表示叶子节点的个数减去i节点的最大值,所以用叶子节点个数减dfs(i)就是i节点最大值,至于树形dp那一块,看代码应该能懂了。
- 树形dp + 深度优先搜索 + 好像也有点贪心在里面吧
#include "bits/stdc++.h"
using namespace std;
const int MAXN = 3e5 + ;
const int INF = 0x3f3f3f3f;
vector<int> v[MAXN];
int arr[MAXN], val[MAXN];
int leaf;
int dfs(int k) {
if (v[k].empty()) return ;
if (arr[k] == ) {
int mn = INF;
for (int i = ; i < v[k].size(); i++)
mn = min(mn, dfs(v[k][i]));
return mn;
} else {
int sum = ;
for (int i = ; i < v[k].size(); i++)
sum += dfs(v[k][i]);
return sum + v[k].size() - ;
}
}
int main() {
int n, k;
scanf("%d", &n); leaf = n;
for (int i = ; i <= n; i++)
scanf("%d", &arr[i]);
for (int i = ; i <= n; i++) {
scanf("%d", &k);
if (v[k].empty()) leaf--;
v[k].push_back(i);
}
printf("%d\n", leaf - dfs());
return ;
}思路来源于今年蓝桥杯省赛的一道求雨题,不过这两题比赛当场都没能完成。都是比赛结束之后才想通的。继续努力
CF-551:部分题目总结的更多相关文章
- CF 551 E GukiZ and GukiZiana
https://codeforces.com/contest/551/problem/E 分块真强. 题意就是1.区间加,2.询问整个区间中,最远的两个x的距离. 分块,然后,每次找位子用二分找即可. ...
- CF 551 D.Serval and Rooted Tree 树形DP
传送门:http://codeforces.com/contest/1153/problem/D 思路: 这道题想了一天,突发奇想,就是维护每个点两个值,第几大和第几小,就可以有传递性了. #incl ...
- CF 题目选做
写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个 ...
- CF 219D 树形DP
CF 219D [题目链接]CF 219D [题目类型]树形DP &题意: 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到 ...
- LeetCode:学生的出勤记录|【551】
LeetCode:学生的出勤记录|[551] 题目描述 给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个字符: 'A' : Absent,缺勤 'L' : Late,迟到 'P' : P ...
- 跟着xiaoxin巨巨做cf
cf 385 C. Bear and Prime Numbers 题目大意:有一个数列{xi},每次给出一个询问[l, r],即问 S(l ,r)是l和r之间的素数,f(p)表示数列{xi}中整除p的 ...
- Codeforces Round #379 (Div. 2) 解题报告
题目地址 本次CF是在今天早上深夜进行,上午有课就没有直接参加.今天早上上课坐到后排参加了virtual participation.这次CF前面的题目都非常的水,不到10分钟就轻松过了前两题,比较郁 ...
- 洛谷P3367 【模板】并查集
P3367 [模板]并查集 293通过 551提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 不知道哪错了 为啥通不过最后三个节点 题解 不懂为什么MLE 最后一个数 ...
- Miaomiao's Geometry
HDU 4932 Bestcoder Problem Description There are N point on X-axis . Miaomiao would like to cover t ...
- Codeforces Round #221 (Div. 2) C. Divisible by Seven(构造 大数除法 )
上几次的一道cf题. 题目:http://codeforces.com/contest/376/problem/C 性质: (4)a与b的和除以c的余数(a.b两数除以c在没有余数的情况下除外),等于 ...
随机推荐
- WordPress迁移服务器后报Nginx404的问题
Wordpress迁移服务器后,只有主页能打开,其它页面都显示404 页面无法访问. 出现这个问题是因为我的Wordpress之前用的服务器是apache+PHP组合,换了服务器后变成了Nginx+P ...
- JAVE官方文档
官网地址:http://www.sauronsoftware.it/projects/jave/manual.php JAVE manual Installation and requirements ...
- MySQL之完整建表语句及数据类型
1.创建表的完整语法 create table 表名( 字段名称 数据类型[(长度) 约束条件], 字段名称 数据类型[(长度) 约束条件] ) 必须的:字段名 数据类型 表名 可选的:长度 约束条件 ...
- Anaconda 添加清华源与恢复默认源
1.添加清华源 查看清华大学官方镜像源文档:https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ 本文基于Windows平台,首先用命令: conda ...
- ElasticSearch使用小结
最近有个业务需求,即全文搜索关键字查询列表,因而转向ES的学习,也学习了大半个月了,做个笔记,总结下自己的学习历程. 独自学习一项新技术,总是难免走不少弯路的,在此推荐下ES的基础教程,对,好好学习官 ...
- mysql查看整库个表详情
information_schema.tables字段说明 字段 含义 Table_catalog 数据表登记目录 Table_schema 数据表所属的数据库名 Table_name 表名称 Tab ...
- PHP学习之-文件上传
一.PHP文件上传 HTML部分 <form action="file_big.php" method="post" enctype="mult ...
- jQuery如何给DOM添加ID
ID每个元素只能有一个,ID名同一页面也不能重复,addID方法是不需要的,和其他属性一样用attr方法就行了, $(singleTarget).attr('id','idName'); 更简单的 $ ...
- Ubuntu---VIM 常用命令
今天学习 VIM 的一些常用命令,向传说中的“最后一个编辑器”进攻,哈哈 插入命令: # insert i : 当前光标之前插入 I : 在此行的行首插入 o : 在下一行新起一行插入 O : 在上一 ...
- UML-为什么要使用层?
1.内聚职责:使关系分离.减少耦合和依赖,提高潜在复用性. 2.领域层和技术服务层可以是分布式的 3.利于团队开发