Problem - 2180D - Codeforces
Problem - 2180D - Codeforces题意很简单 要求圆的面积没有交点 然后求尽可能大的相切点的个数首先每个点的半径的上界就是他到相邻两个节点的距离的最小值对于一段合法的圆 我们可以求一下第一个圆的半径的范围 然后就可以根据圆之间的距离求出下一个圆的半径的范围 如果最大半径大于最小半径 就是合法反之就是不合法 那么就直接分隔开 ans--然后再分割点重复操作即可代码如下#include bits/stdc.h using namespace std; #define int long long const int N2e65,INF1e18; int a[N]; void solve(){ int n; cinn; for(int i1;in;i){ cina[i]; } if(n1){ cout0\n;return ; } vectorintx(n1,INF); for(int i2;in;i){ int da[i]-a[i-1]; x[i]min(x[i],d); x[i-1]min(x[i-1],d); } int l0,rx[1]; int ansn-1; for(int i2;in;i){ int da[i]-a[i-1]; int l1l,r1r; l1max(d-r,0LL); r1min(d-l,x[i]); ll1,rr1; if(lr){ ans--; l0;rx[i]; } } coutans\n; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cint; while(t--)solve(); return 0; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2487285.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!