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. select多选框

    select多选框 效果: 代码: <HTML> <HEAD> <TITLE>选择下拉菜单</TITLE> <meta http-equiv=&q ...

  2. Django之jsonp跨域请求原理

    在进行网站开发的过程中经常会用到第三方的数据,但是由于同源策略的限制导致ajax不能发送请求,因此也无法获得数据.解决ajax的跨域问题有两种方法: 一.jsonp 二.XMLHttpRequest2 ...

  3. JS设计模式——3.封装与信息隐藏

    封装.信息隐藏与接口的关系 信息隐藏是目的,封装是手段. 接口提供了一份记载着可供公共访问的方法的契约.它定义了两个对象间可以具有的关系.只要接口不变,这个关系的双方都是可以替换的. 一个理想的软件系 ...

  4. shell将多行文本重定向到文件【转】

    在shell中,使用Here Document方式将文本重定向到文件,格式如下: ( cat << EOF 要写的文本 EOF ) > 目标文件 示例test.sh: #! /bin ...

  5. 如何使用curl命令指定ip访问url

    有时我们需要测试一个url,但域名并没解析,这时为了一个简单的测试而写host或去做域名解析,显然这并不高效,而有些域名甚至是正式的域名,因此我们可有使用curl命令进行测试 方法一 curl url ...

  6. WebAPI使用Swagger生成接口文档

    开发工具:VS2017 版本15.7.1 新建项目,选择空模板,下面只勾选WebAPI 配置Web.config <system.webServer> 节点改为 <system.we ...

  7. [ python ] 练习作业 - 2

    1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. lic = [0, 1, 2, 3, 4, 5] def func(l): return l[1::2 ...

  8. ECharts图表tooltip显示时超出canvas图层解决方法

    我们在做ECharts图表的时候可能会遇到tooltip显示时超出了canvas图层范围,并且被其它z-index较高的div容器遮盖,这是悬浮展示信息就看不全,我们根据官网文档的配置项查询发现con ...

  9. C++大数据处理

    转:http://blog.csdn.net/v_july_v/article/details/7382693 作者:July出处:结构之法算法之道blog 前言 一般而言,标题含有“秒杀”,“99% ...

  10. MVC – 8.Razor 布局

    8.1.@RenderBody() 8.2.多个"占位符":@RenderSection() 8.3.js合并 @Scripts.Render("~/bundles/js ...