CCPC-Wannafly Winter Camp Day8 (Div2, onsite)
咕咕咕。 camp补题。
传送门:https://www.zhixincode.com/contest/29/problems
A.Aqours
题意:有一棵有根树,根节点为1,给出每个结点的父亲节点。其中根节点是 1 号点。i号结点的父亲为pi。保证1<=pi,而且对于2<=i<j<=n,有pi<=pj。
问对于每一个叶子节点,与编号比他小的叶子结点的最近距离是什么?
分析:根据题意可以将给定的点序列看为BFS序。对于每一个结点u,可以维护一个f[u]代表距离点u的最近叶子结点的距离。
那么,每次遇到一个叶子结点,就暴力向上搜,在搜的过程中,更新f值,直至搜到一个被更新过的结点,即被其他叶子结点搜过的点。
每碰到一个被搜过的点xx,那么对于当前这个叶子节点来说,答案就是f[xx]+搜到xx的步数。
同时还需要在回溯的过程中,更新每个点的距离叶子节点的最短距离。
#include<bits/stdc++.h>
using namespace std;
const int maxn=3e6+;
const int inf=0xfffffff;
int outd[maxn],f[maxn],fa[maxn],vis[maxn];
int ff;
int dfs(int xx,int step){
if (vis[xx]){ff=f[xx]+step;return f[xx]+;}
vis[xx]=; f[xx]=step;
int tmp=inf;
if (xx!=) tmp=dfs(fa[xx],++step);
f[xx]=min(f[xx],tmp);
return f[xx]+;
}
int main(){
int n,x; scanf("%d",&n);
memset(outd,,sizeof(outd));
for (int i=;i<=n;i++){
scanf("%d",&x);
fa[i]=x;
outd[x]++;
}
for (int i=;i<=n;i++) vis[i]=;
for (int i=;i<=n;i++){
if (outd[i]==){
ff=;
dfs(i,);
if (ff!=) printf("%d %d\n",i,ff);
else printf("%d -1\n",i);
}
}
return ;
} /*反例:
10
1 1 1 2 2 2 5 7 8 答案:
3 -1
4 2
6 3
9 3
10 4
*/
A.Aqours
C.御坂妹妹
题意:有n条直线,以y=kx+b的形式给出。求解一个垂直于x轴的线段,要求和这n条直线都有交点。问所求线段的最短距离了是多少。
分析:通过画图,可以观察到,可以维护这n条直线所形成的,一个在直线上方的凸包,一个在直线下方的凸包。答案一定是在所求的凸包点的x值处。
(也不完全是凸包,eg.样例。。类似于凸壳。
题解还有一种做法是:
不是很懂扫描线的操作。(雾
另:(男朋友是神仙.jpg
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+;
struct line{
double k,b;
}ll[maxn],sta1[maxn],sta2[maxn];
double st1[maxn],st2[maxn];
int n;
bool cmp1(line p,line q){return p.k<q.k || p.k==q.k && p.b>q.b;}
bool cmp2(line p,line q){return p.k>q.k || p.k==q.k && p.b<q.b;}
double calc(line l1,line l2){return (l2.b-l1.b)/(l1.k-l2.k);}
bool check(line a,line b,line L){
if (calc(a,L)<=calc(a,b)) return true;
return false;
}
void solve(line sta[],double st[],int &num){
int top=;
for (int i=;i<n;i++){
if (top<){sta[++top]=ll[i]; continue;}
if (ll[i].k==ll[i-].k) continue;
while (top> && check(sta[top-],sta[top],ll[i])) top--;
sta[++top]=ll[i];
}
num=;
for (int i=;i<=top;i++){
double xx=calc(sta[i],sta[i-]);
st[++num]=xx;
}
st[++num]=1e9;
}
set<double> aa;
int main(){
scanf("%d",&n);
double max_=-1e9,min_=1e9;
for (int i=;i<n;i++) scanf("%lf%lf",&ll[i].k,&ll[i].b),aa.insert(ll[i].k),
max_=max(ll[i].b,max_),min_=min(ll[i].b,min_);
if (aa.size()==) return printf("%.10f\n",max_-min_),;
//
sort(ll,ll+n,cmp1); int num1=;
solve(sta1,st1,num1);
//
sort(ll,ll+n,cmp2); int num2=;
solve(sta2,st2,num2); double ans=1e20;
for (int i=;i<num1;i++){
int xx=upper_bound(st2+,st2++num2,st1[i])-st2;
double tmp=fabs(sta1[i].k*st1[i]+sta1[i].b-sta2[xx].k*st1[i]-sta2[xx].b);
ans=min(ans,tmp);
}
for (int i=;i<num2;i++){
int xx=upper_bound(st1+,st1++num1,st2[i])-st1;
double tmp=fabs(sta2[i].k*st2[i]+sta2[i].b-sta1[xx].k*st2[i]-sta1[xx].b);
ans=min(ans,tmp);
}
printf("%.10f\n",ans);
return ;
}
C
(wa了好多发的题。傻逼错误。我是智障.jpg
CCPC-Wannafly Winter Camp Day8 (Div2, onsite)的更多相关文章
- Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门 Portal 原题目描述在最下面. 简单的 ...
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite) A 题 Aqours (精巧的树形DP)
题目链接: https://www.cometoj.com/contest/29/problem/A?problem_id=414 Aqours 题目描述 Aqours 正在 LoveLive! 决赛 ...
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite) 补题
A Aqours 题解: https://www.cnblogs.com/qieqiemin/p/11251645.html D:吉良吉影的奇妙计划 (暴力打表) 题目描述 吉良吉影是一个平凡的上班族 ...
- 2020 CCPC Wannafly Winter Camp Day1 C. 染色图
2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...
- CCPC Wannafly Winter Camp Div2 部分题解
Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...
- CCPC-Wannafly Winter Camp Day5 (Div2, onsite) Sorting(线段树)
题目链接 题意 对序列进行三种操作: 1.区间求和. 2.将区间小于等于$x$的数不改变相对顺序的前提下放到$x$左边,用同样规则将比$x$大的放到右边. 3.将区间大于$x$的数不改变相对顺序的前提 ...
- CCPC-Wannafly Winter Camp Day3 (Div2, onsite)
Replay Dup4: 没想清楚就动手写? 写了两百行发现没用?想的还是不够仔细啊. 要有莽一莽的精神 X: 感觉今天没啥输出啊, 就推了个公式?抄了个板子, 然后就一直自闭A. 语文差,题目没理解 ...
- 2019 CCPC-Wannafly Winter Camp Day1 (Div2, onsite)
solve:4/11 补题:6/11 A 机器人 补题:zz 这是一道分类讨论的题目,有一个规律就是如果必须要从第一个区到第二个区,那么最多转区两次(1到2一次,2到1一次),然后分类讨论即可,只要细 ...
- 2019 CCPC-Wannafly Winter Camp Day7(Div2, onsite)
solve 6/11 补题: A.迷宫 Code:zz Thinking:zz kk 把每个节点的深度都处理出来,同一深度的点的冲突度为 (x-1),x为同层次点数减一. 然后冲突度不断下传(冲突度为 ...
随机推荐
- 【Noip模拟 20160929】选数
题目描述 现在有一排共N个数,你需要从中选出恰好K个.选出K个数后,计算它们两两差值的绝对值的最小值S.你需要确定选出哪K个,才能最大化这个S. 输入数据 输入第一行两个正整数N.K,含义如上. 输入 ...
- 电商项目中使用Redis实现秒杀功能
参与过抢购活动就知道,很明显的一点是商即便商品实际没有了也是可以下单成功的,但是在支付的时候会提示你商品没有了. 实现原理:list双向链表 使用redis队列,因为pop操作是原子的,即使有很多用户 ...
- 微信小程序实现计算器功能
page { height:100%;} .calculator { width: 100%; height: 100vh; border:solid 1px; background: rgb(238 ...
- 微信小程序---分包加载(subpackages)及报错
某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载. 分包很简单,具体步骤如下: 在app.json中,创建subPackages,root表示分包A的 ...
- python学习笔记(六)- 函数、文件json与python字典互操作
1.函数:(方法.功能) 1.提高代码的复用性 2.让代码更简洁.简化代码 1)定义一个简单的函数 def sayHello(): #函数名,定义函数 print("hello") ...
- Jmeter正则表达式提取器二(转载)
转载自 http://www.cnblogs.com/qmfsun/p/5906462.html JMeter获取正则表达式中的提取的所有关联值的解决方法: 需求如下: { : "error ...
- mysql面试题集
Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发.5.6之前默认myisam 2. ...
- GCD - Extreme (II) (欧拉函数妙用)
https://cn.vjudge.net/problem/UVA-11426 题意:求 解题思路:我们可以定义一个变量dis[n],dis[n]意为1~(n-1)与n的gcd(最大公约数)的总和,那 ...
- 890. Find and Replace Pattern找出匹配形式的单词
[抄题]: You have a list of words and a pattern, and you want to know which words in words matches the ...
- svn 清理失败的解决方法
首先 下载 SQLiteSpy 工具, 解压后如下图所示, 打开 .exe 应用程序,File ,opendatabase 选中wc.db 然后执行 delete from work_qu ...