ABC181 A - Heavy Rotation

题目传送门


代码(签到题)

#include <cstdio>
#define rr register
using namespace std;
signed main(){
rr int n; scanf("%d",&n);
return !puts((n&1)?"Black":"White");
}

ABC181 B - Trapezoid Sum

题目传送门


分析

等差数列求和,记得开long long


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
signed main(){
rr long long ans=0;
for (rr int n=iut();n;--n){
rr int x=iut(),y=iut();
ans+=1ll*(x+y)*(y-x+1)>>1;
}
return !printf("%lld",ans);
}

ABC181 C - Collinearity

题目传送门


分析

枚举三个点直接判断斜率是否相同,

但是注意可能存在斜率不存在的情况要特判

成功罚时qwq


代码

#include <cstdio>
#include <cctype>
#include <cmath>
#define rr register
using namespace std;
const double eps=1e-8;
int n,x[111],y[111],cnt[2111];
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
} signed main(){
n=iut();
for (rr int i=1;i<=n;++i) x[i]=iut(),y[i]=iut();
for (rr int i=1;i<=n;++i)
if (++cnt[x[i]+1000]==3)
return !printf("Yes");
for (rr int i=1;i<n-1;++i)
for (rr int j=i+1;j<n;++j)
for (rr int o=j+1;o<=n;++o){
if (x[i]==x[j]||x[o]==x[j]) continue;
rr double A=(y[j]-y[i])*1.0/(x[j]-x[i]);
rr double B=(y[o]-y[j])*1.0/(x[o]-x[j]);
if (fabs(A-B)<eps) return !printf("Yes");
}
return !printf("No");
}

ABC181 D - Hachi

题目传送门


分析

考虑位数小于3特判,由于1000是8的倍数,

所以只要枚举后三位是否存在8的倍数即可


代码

#include <cstdio>
#include <cstring>
#define rr register
using namespace std;
const int N=200011;
char s[N]; int cnt[10],len;
signed main(){
scanf("%s",s+1),len=strlen(s+1);
for (rr int i=1;i<=len;++i) ++cnt[s[i]^48];
if (len==1) return !puts(cnt[8]?"Yes":"No");
else if (len==2){
for (rr int i=1;i<10;++i)
for (rr int j=2;j<10;j+=2)
if ((i*10+j)%8==0){
if (i==j){
if (cnt[i]>1) return !puts("Yes");
}else{
if (cnt[i]&&cnt[j]) return !puts("Yes");
}
}
return !puts("No");
}
for (rr int j=1;j<10;++j)
for (rr int o=2;o<10;o+=2)
if ((j*10+o)%4==0){
if (j==o){
if (cnt[j]<2) continue;
cnt[j]-=2;
}else{
if (!cnt[j]||!cnt[o]) continue;
--cnt[j],--cnt[o];
}
for (rr int i=1;i<10;++i)
if ((i*100+j*10+o)%8==0&&cnt[i])
return !puts("Yes");
if (j==o) cnt[j]+=2;
else ++cnt[j],++cnt[o];
}
return !puts("No");
}

ABC181 E - Transformable Teacher

题目传送门


题意

在\(m\)种身高中选择一种,将其插入一个长度为\(n\)的序列,

使得\(n+1\)个数两两配对后配对的数的差的绝对值和最小

一句话题意就是

\[\large\min_{1\leq i\leq m}\sum_{j=1}^{\frac{n+1}{2}}|x_j-y_j|,n=2k+1
\]

分析

显然最优的策略就是将长度为\(n+1\)的序列排序后\(2i+1\)与\(2i+2\)配对

然而考虑插入一个数时修改只是局部的,那么考虑维护奇偶配对和偶奇配对的前缀和

细节有点多,但是画个图就能够明白


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=200011;
typedef long long lll;
lll b[N],ans; int n,m,a[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline lll min(lll a,lll b){return a<b?a:b;}
signed main(){
n=iut(),m=iut(),ans=1e18;
for (rr int i=1;i<=n;++i) a[i]=iut();
sort(a+1,a+1+n);
for (rr int i=2;i<=n;++i) b[i]=b[i-2]+a[i]-a[i-1];
for (rr int i=1;i<=m;++i){
rr int x=iut();
if (x<=a[1]) ans=min(ans,b[n]+a[1]-x);
else if (x>=a[n]) ans=min(ans,b[n-1]+x-a[n]);
else {
rr int j=upper_bound(a+1,a+1+n,x)-a;
if (j&1) ans=min(ans,b[j-1]+b[n]-b[j]+a[j]-x);
else ans=min(ans,b[j-2]+b[n]-b[j-1]+x-a[j-1]);
}
}
return !printf("%lld\n",ans);
}

ABC181 F - Silver Woods

题目


题意

一个圆的圆心一开始从\((-10^9,0)\)任意运动至\((10^9,0)\)

要求圆的内部不能经过给定的\(n\)个点以及直线\(y=\pm 100\)

问圆的最大半径是多少


分析

二分答案,但是直接走很难行得通

考虑判断它走不通,那也就是存在一条路使得上边界能够“走”到下边界

对于当前二分到的半径,如果超出边界则与边界连边,否则圆的直径不能超过两点的距离

并用并查集维护连通性


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=111;
int f[N],siz[N],x[N],y[N],n;
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline signed getf(int u){return f[u]==u?u:f[u]=getf(f[u]);}
inline void uni(int x,int y){
rr int fa=getf(x),fb=getf(y);
if (fa==fb) return;
if (siz[fa]>siz[fb]) fa^=fb,fb^=fa,fa^=fb;
siz[fb]+=siz[fa],f[fa]=fb;
}
inline bool check(double mid){
for (rr int i=1;i<n+3;++i) f[i]=i,siz[i]=1;
for (rr int i=1;i<=n;++i){
if (mid*2>100-y[i]) uni(i,n+1);
if (y[i]+100<2*mid) uni(i,n+2);
for (rr int j=i+1;j<=n;++j)
if ((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])<mid*mid*4)
uni(i,j);
}
return getf(n+1)==getf(n+2);
}
signed main(){
n=iut();
for (rr int i=1;i<=n;++i)
x[i]=iut(),y[i]=iut();
rr double l=0,r=100;
while (l+1e-6<r){
rr double mid=(l+r)/2;
if (check(mid)) r=mid;
else l=mid;
}
return !printf("%lf",l);
}

AtCoder Beginner Contest 181的更多相关文章

  1. AtCoder Beginner Contest 181 题解

    总结 第一次 \(AK\ ABC\) 的比赛,发一个截图纪念一下 A - Heavy Rotation 题目大意 一个人一开始穿白衣服,一天后换成黑衣服,再过一天又换成白衣服,问第 \(n(n \le ...

  2. 【AtCoder Beginner Contest 181】A~F题解

    越学越菜系列 于2020.11.2,我绿了(错乱) A - Heavy Rotation 签到题,奇数Black,偶数White. code: #include<bits/stdc++.h> ...

  3. AtCoder Beginner Contest 181 E - Transformable Teacher (贪心,二分)

    题意:有一长度为奇数\(n\)的数组\(a\),和长度为\(m\)的数组\(b\),现要求从\(b\)中选择一个数放到\(a\)中,并将\(a\)分成\((n+1)/2\)个数对,求最小的所有数对差的 ...

  4. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  5. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  6. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  7. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  8. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  9. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  10. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

随机推荐

  1. golang泛型简介

    linux下go版本安装(1.18.1版本) >>> wget https://go.dev/dl/go1.18.1.linux-amd64.tar.gz >>> ...

  2. 【LeetCode贪心#10】划分字母区间(有涉及hash数组的使用)

    划分字母区间 力扣题目链接(opens new window) 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中.返回一个表示每个字符串片段的长度的列表 ...

  3. 用宝塔设立分发Directory.Build.props及其Import文件的网站

    新建站点 服务器名称我们约定是dev.amihome.cn 创建的默认站点有下面4个文件 把本地的文件,用宝塔上传 上图我们是把本地的Directory.Build.props文件上传到了网站的根目录 ...

  4. 【Azure 应用服务】收集App Service 关于Availability Zone, Health check 以及 Traffic Manager的文档,并了解高可用(HA)和灾备(DR)

    问题描述 收集App Service 关于Availability Zone, Health check 以及 Traffic Manager的文档,并了解高可用(HA)和灾备(DR)的具体办法 问题 ...

  5. 【Azure API 管理】如何修改Azure APIM的管理员邮箱和组织名称

    问题描述 当创建一个新的APIM服务时,会要求输入组织名称(Organization name)和管理员邮箱(Administrator email :Set the e-mail address t ...

  6. 答应我,在vue中不要滥用watch好吗?

    前言 上周五晚上8点,开开心心的等着产品验收完毕后就可以顺利上线.结果产品突然找到我说要加需求,并且维护这一块业务的同事已经下班走了,所以只有我来做.虽然内心一万头草泥马在狂奔,但是嘴里还是一口答应没 ...

  7. 如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践

    图计算业务背景介绍 我们为什么选择 NebulaGraph? 在公司各个业务线中,有不少部门都有着关系分析等图探索场景,随着业务发展,相关的需求越来越多.大量需求使用多模数据库来实现,开发成本和管理成 ...

  8. Jmeter 之 forEach控制器

    1 添加方法: 线程组右键-> 添加 -> 逻辑控制器 ->ForEach控制器   2 作用: 可以更方便JMeter后置处理器提取出来的多组数据,也可以定义具有特定规则的数据,用 ...

  9. Java 小案列 this关键字使用+构造器 +方法+调用

    1 package com.bytezero.thistest; 2 3 public class Boy 4 { 5 private String name; 6 private int age; ...

  10. C# 课堂管理系统(火影忍者界面!!!)

    1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 usin ...