2020 ICPC Shanghai Site D I
闲话:赛时被D分类卡了很久 讨论了很多很傻逼的情况 但是就是没有想到交叉 赛后发现I其实更简单
D. Walker
虽然但是知道是分类讨论
不过还是很难知道他那三个情况咋想的
1.显然我们要是有一个超级快 我们可以先让他跑完小的一边再回过头跑长的一边
2.两个交叉跑过去 比如一个样例 1000 100 3 200 0.666
3.还有就是我们这两个在一个点“碰头” 当然不是真的碰头
就是左边点跑[0,mid] 右边点跑[mid,n]
这个我们可以直接二分时间 看看该时间内贪心的跑能不能碰头
bool check(double t){ if(t*v1<len1||t*v2<len3)return 0; double l,r; if(t*v1>3*len1){ l=t*v1-2*len1; }else{ l=(t*v1-len1)/2; } if(t*v2>3*len3){ r=t*v2-2*len3; }else{ r=(t*v2-len3)/2; } if(l+r>=len2)return 1; else return 0; } void solve(){ double ans=2e9; cin>>n>>p1>>v1>>p2>>v2; if (p1 > p2) swap(p1, p2), swap(v1, v2); len1=p1,len2=p2-p1,len3=n-p2; ans=min({ans,(len1*2+len2*2+len3)/v2,(len1+len2+len3*2)/v2, (len1*2+len2+len3)/v1,(len1+len2*2+len3*2)/v1}); ans=min(ans,max((len1+len2)/v2,(len2+len3)/v1)); double l=0,r=1e8; while((r-l)>1e-8){ double mid=(l+r)/2; if(check(mid)){r=mid;ans=min(ans,mid);} else l=mid; } printf("%.10lf\n",ans); }
I. Sky Garden
这道题就比较简单了 连mod都没有 划分集合都没有了
因为一个环 我们算了一个点 环上的点都是等价的 直接乘出来就可以了
而且范围还是500
直接暴力n3就可以了
其实随便改改都能变成O(1)的
因为其实你后面的点进来也不会改选择的方式
void solve(){ int n,m;cin>>n>>m; //n层 pi/m double ans=0; if(m!=1){ ans+=n*m+n*n*m; } for(int i=1;i<=n;i++){ //tong cen double res=0; for(int j=1;j<m;j++){ res+=min((double)j/m*pi*i,(double)i*2); } res*=2; res+=2*i; res*=m; ans+=res; //nei cen for(int j=i-1;j>=1;j--){ res=0; for(int k=1;k<m;k++){ res+=i-j; res+=min((double)k/m*pi*j,(double)j*2); } res*=2; res+=i-j; res+=i+j; res*=2*m; ans+=res; } } printf("%.10lf\n",ans); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话