Codeforces Round #514 (Div. 2)

题目链接:Codeforces Round #514 (Div. 2) A:暴力找每个间隔能休息几次。注意首尾。
【Codeforces Round #514 (Div. 2)】AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops") #include //#define int long long using namespace std; const int N=1e5+10; int res,n,L,a,t[N],l[N]; signed main(){ cin>>n>>L>>a; for(int i=1; i<=n; i++) cin>>t[i]>>l[i]; for(int i=1; i<=n; i++){ res+=(t[i]-t[i-1]-l[i-1])/a; } res+=(L-t[n]-l[n])/a; cout<

B:枚举每个点,能涂就涂,最后判断是不是一样即可。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops") #include //#define int long long using namespace std; const int N=1e3+10; const int dx[]={0,1,1,1,0,-1,-1,-1},dy[]={1,1,0,-1,-1,-1,0,1}; int n,m,flag; char a[N][N],b[N][N]; inline int check(int x,int y){ for(int k=0; k<8; k++) if(a[x+dx[k]][y+dy[k]]!='#') return 0; return 1; } signed main(){ cin>>n>>m; for(int i=1; i<=n; i++) scanf("%s",a[i]+1); for(int i=2; i

C:删掉的数字为,先删奇数,然后2的倍数非4的倍数,然后4的倍数非8的倍数。
注意只有三个数字的情况。一定是 k k 3*k。
删数字可以set当中实现。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops") #include //#define int long long using namespace std; int n,k=1; set s; signed main(){ cin>>n; if(n<4){ for(int i=1; i0){ vector v; if(n==3){printf("%d %d %d\n",k,k,k*3); return 0; } for(auto x:s){ if(__gcd(x,k<<1)==k) v.push_back(x); } for(int i=0; i

D:首先二分半径,然后我们可以发现可能的圆,构成了一条直线。然后对于每个点,我们可以找到一个区间,所以就是判断区间是否有交集。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops") #include //#define int long long using namespace std; const int N=1e5+10; const double eps=1e-8; long double x[N],y[N],l,r=1e18,mi=1e9,mx; int n,cnt; set s; inline int check(double mid){ long double cl=-1e18,cr=1e18; for(int i=1; i<=n; i++){ if(y[i]>2*mid) return 0; long double p=sqrt(2.0*y[i]*mid-y[i]*y[i]); long double ql=x[i]-p,qr=x[i]+p; cl=max(cl,ql),cr=min(qr,cr); if(cl>cr) return 0; } return 1; } signed main(){ cin>>n; for(int i=1; i<=n; i++){ cin>>x[i]>>y[i],mi=min(mi,y[i]),mx=max(mx,y[i]); if(fabs(y[i])0&&mi<0)||cnt>1) return puts("-1"),0; if(s.size()==1){ long double mx=-1e18; for(int i=1; i<=n; i++) mx=max(mx,y[i]); return printf("%.10Lf\n",mx/2),0; } for(int i=1; i<=150; i++){ long double mid=(l+r)/2; if(check(mid)) r=mid; else l=mid; } printf("%.10Lf\n",l); return 0; }

    推荐阅读