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. [2023本地存储方案](https://www.cnblogs.com/fangchaoduan/p/17608006.html)

    2023本地存储方案 本地存储方案 cookie 本地存储:有期限的限制,可以自己设置过期期限.在期限内,不论页面刷新还是关闭,存储的信息都还会存在. localStorage 本地持久化存储:页面刷 ...

  2. React Native如何每次唤醒APP都执行一段代码

    最近想要做一个类似于淘宝每次打开会根据用户剪贴板内容弹出对应商品的功能.要完成这个功能需要每次唤醒APP都读取一次剪贴板. 1.监听 && 销毁 1 async componentDi ...

  3. Java JVM——4.程序计数器

    简介 JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行. 这 ...

  4. 逆向实战32——某东最新h5st4.4算法分析

    前言 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  5. 【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found

    问题描述 Springboot 集成azure keyvault 报错,代码参考的官方文档:https://docs.microsoft.com/en-us/azure/developer/java/ ...

  6. 继续总结Python中那些简单好用的用法

    上一篇文章Python中那些简单又好用的特性和用法发出后,群里的小伙伴又给补充了几个好用的用法,结合生产实用经验汇总整理如下,各位看官如有需要请自取 反射,反射是一种机制,可以在运行时获取.检查和修改 ...

  7. jQuery 框架

    jQuery 框架 目录 jQuery 框架 一. 概述 二. jQuery 安装引用 2.1 安装 2.2 本地导入使用 2.3 jQuery CDN引入 三. jQuery基本语法 四. 查找标签 ...

  8. web项目开发写接口时,为什么需要在关键位置打印日志-2022新项目

    一.业务场景 最近在开发新功能,新功能主要就是写app的首页查询接口,接口比较多有十几个,首页会有各种查询,新增操作比较少.由于用户量 比较大,据说并发量不小,所以首页的很多查询都做了缓存处理,用来提 ...

  9. 3D模型+BI分析,打造全新的交互式3D可视化大屏开发方案

    背景介绍 在数字经济建设和数字化转型的浪潮中,数据可视化大屏已成为各行各业的必备工具.然而,传统的数据大屏往往以图表和指标为主,无法真实地反映复杂的物理世界和数据关系.为了解决这个问题,3D模型可视化 ...

  10. Python根据时间命名并创建文件源码

    自己写的,产品中验证ok的代码,直接上实例: import time def file_create_func(): loca = time.strftime('%Y-%m-%d-%H-%M-%S') ...