Link:

Codeforces #514 传送门

很简单的一场比赛打崩了也是菜得令人无话可说……

D:

一眼二分,发现对于固定的半径和点,能包含该点的圆的圆心一定在一个区间内,求出区间判断即可

此题一个重要性质就是圆与$x$轴相切,画出圆心所在直线后就能想到上述贪心了

#include <bits/stdc++.h>

using namespace std;
#define X first
#define Y second
#define pb push_back
typedef double db;
typedef long long ll;
typedef pair<db,db> P;
const db eps=1e-;
const int MAXN=1e5+;
struct Data{db l,r;int id;}a[MAXN];
int n,cnt1,cnt2;P dat[MAXN]; bool cmp(Data a,Data b)
{return a.l<b.l;}
db sqr(db x){return 1.0*x*x;}
bool cal(db r,int k)
{
db b=*dat[k].X;
db c=sqr(dat[k].X)+sqr(dat[k].Y-r)-sqr(r);
if(sqr(b)-*c<-eps) return false;
a[k].id=k;
a[k].l=(b-sqrt(sqr(b)-*c))/2.0;
a[k].r=(b+sqrt(sqr(b)-*c))/2.0;
return true;
}
bool check(db r)
{
if(cnt1) r=-r;
for(int i=;i<=n;i++)
if(!cal(r,i)) return false;
db mn=1e60,mx=-1e60;
for(int i=;i<=n;i++)
mn=min(mn,a[i].r),mx=max(mx,a[i].l);
return mx<=mn;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%lf%lf",&dat[i].X,&dat[i].Y);
cnt1+=dat[i].Y<;cnt2+=dat[i].Y>;
}
if(n==) return printf("%.6lf",dat[].Y/2.0),;
if(cnt1&&cnt2) return puts("-1"),; //实数二分最好直接枚举次数,否则精度可能不够
// 也可以相对误差和eps比较
db l=,r=1e16;
for(int i=;i<=;i++)
{
db mid=(l+r)/2.0;
if(check(mid)) r=mid;
else l=mid;
}
printf("%.6lf",l);
return ;
}

Problem D

做的时候先想的凸包,想到正解后把一个$int$开成$double$后调不出来……

所以发现输出全是整数时要敏感啊……

注意:实数二分不用$fabs(l-r)$,会爆精度,最好卡次数

E:

可以先预处理每个点向上走的最远距离在树上$dp$,

不过其实直接从低向上贪心走就好了,在之前被走过的点就不用走了

可以并查集维护也可以直接暴力走

#include <bits/stdc++.h>

using namespace std;
#define X first
#define Y second
#define pb push_back
typedef double db;
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=2e5+;
ll S,w[MAXN],pre[MAXN],res;
int n,L,f[MAXN],ufs[MAXN],vis[MAXN],dep[MAXN],out[MAXN]; int find(int x)
{return x==ufs[x]?x:find(ufs[x]);}
int main()
{
scanf("%d%d%lld",&n,&L,&S);
for(int i=;i<=n;i++) scanf("%lld",&w[i]);
for(int i=;i<=n;i++)
scanf("%d",&f[i]),out[f[i]]++;
for(int i=;i<=n;i++)
{
ufs[i]=i;
if(w[i]>S) return puts("-1"),;
}
for(int i=;i<=n;i++)
dep[i]=dep[f[i]]+,pre[i]=pre[f[i]]+w[i]; queue<int> q;
for(int i=;i<=n;i++)
if(!out[i]) q.push(i);
while(!q.empty())
{
int t=q.front();q.pop();
if(vis[t]) continue;
int cur=t;res++;
int len=;ll sum=;
while(len<=L&&sum<=S)
{
int nxt=find(cur);
len+=dep[cur]-dep[nxt]+;
sum+=pre[cur]-pre[nxt]+w[nxt];
if(len>L||sum>S) break;
vis[nxt]=;if(!f[nxt]) break; ufs[nxt]=find(f[nxt]);out[f[nxt]]--;
if(!out[f[nxt]]&&!vis[f[nxt]]) q.push(f[nxt]);
cur=f[nxt];
}
}
printf("%lld",res);
return ;
}

Problem E

以后做完签到题后把所有题先看一遍再决定顺序!

[Codeforces #514] Tutorial的更多相关文章

  1. Codeforces 514 D R2D2 and Droid Army(Trie树)

    题目链接 大意是判断所给字符串组中是否存在与查询串仅一字符之差的字符串. 关于字符串查询的题,可以用字典树(Trie树)来解,第一次接触,做个小记.在查询时按题目要求进行查询. 代码: #define ...

  2. codeforces#514 Div2---1059ABCD

    1059A---Cashier http://codeforces.com/contest/1059/problem/A 题意: Vasya每天工作\(l\)个小时,每天服务\(n\)个顾客,每个休息 ...

  3. [Codeforces #172] Tutorial

    Link: Codeforces #172 传送门 A: 一眼看上去分两类就可以了 1.每个矩形只有两条边相交,重合的形状为菱形 2.每个矩形四条边都有相交 对于情况1答案为$h*h/sin(a)$ ...

  4. [Codeforces #210] Tutorial

    Link: Codeforces #210 传送门 A: 贪心,对每个值都取最大值,不会有其他解使答案变优 #include <bits/stdc++.h> using namespace ...

  5. [Codeforces #196] Tutorial

    Link: Codeforces #196 传送门 A: 枚举 #include <bits/stdc++.h> using namespace std; #define X first ...

  6. [Codeforces #174] Tutorial

    Link: Codeforces #174 传送门 A: 求原根的个数,有一条性质是原根个数为$\phi(\phi(n))$,多了一个不会证的性质 如果要确定哪些是原根的话还是要枚举,不过对于每个数不 ...

  7. [Codeforces #190] Tutorial

    Link: Codeforces #190 传送门 A: 明显答案为$n+m-1$且能构造出来 #include <bits/stdc++.h> using namespace std; ...

  8. [Codeforces #211] Tutorial

    Link: Codeforces #211 传送门 一套非常简单的题目,但很多细节都是错了一次才能发现啊…… 还是不能养成OJ依赖症,交之前先多想想corner case!!! A: 模拟,要特判0啊 ...

  9. [Codeforces #192] Tutorial

    Link: Codeforces #192 传送门 前两天由于食物中毒现在还要每天挂一天的水 只好晚上回来随便找套题做做找找感觉了o(╯□╰)o A: 看到直接大力模拟了 但有一个更简便的方法,复杂度 ...

随机推荐

  1. 洛谷 Sorting a Three-Valued Sequence 三值的排序

    Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...

  2. 【leetcode 简单】第三十二题 买卖股票的最佳时机Ⅱ

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...

  3. 从docker到docker-compose部署一个nginx+flask+mysql+redis应用

    目的是把一个flask项目的mysql数据库.redis数据库.flask应用.nginx服务分别装到四个容器中,然后用docker-compose命令同时启动与关闭 一.安装docker Docke ...

  4. android ViewPager之OnPageChangeListener接口

    项目中在使用ViewPager的时候,一般都要在界面滑动的时候做一些事情,android中有个专门的状态回调接口OnPageChangeListener. /** * Callback interfa ...

  5. 好消息! 不用再羡慕Python有jupyter 我R也有Notebook了【附演示视频】

    熟悉python的朋友可能知道jupyter notebook.它是一个Web应用程序,允许你创建和共享代码,方程,可视化和说明性文本文档.现在,我们可以在RStudio中实现R Notebook的功 ...

  6. isolation forest进行异常点检测

    一.简介 孤立森林(Isolation Forest)是另外一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划分点(值)时都是随机的,而不是根据信息增益或者基尼指数来选择.在建树过程中, ...

  7. USB基础介绍

    (转)USB (Universal Serial Bus) 全文地址:http://vlewang.blog.163.com/blog/static/105878151201032804347546/ ...

  8. 混合式App开发 Apicloud 官方iPhone X 适配

    iPhone X 适配 由于iPhone X的特殊造型,为了方便开发者对iPhone X进行适配,苹果在iOS 11中引入了Safe Area的概念,引擎也在api对象下添加了safeArea属性和s ...

  9. 147.Insertion Sort List---链表排序(直接插入)

    题目链接 题目大意:对链表进行插入排序. 解法:直接插入排序.代码如下(耗时40ms): public ListNode insertionSortList(ListNode head) { List ...

  10. 9.Python3标准库--数据压缩与归档

    ''' 尽管现代计算机系统的存储能力日益增长,但生成数据的增长是永无休止的. 无损(lossless)压缩算法以压缩或解压缩数据花费的时间来换取存储数据所需要的空间,以弥补存储能力的不足. Pytho ...