2018.11.26 QLU新生赛部分题解
问题 L: 寄蒜几盒? 题目描述 现在有一个圆圈,圆圈上有若干个点,请判断能否在若干个点中选择三个点两两相连组成一个等边三角形?
这若干个点在圆圈上按顺时针顺序分布。
如果可以的话输出"Yes"(不含引号)
不可以的话输出"No"(不含引号) 输入 第一行一个整数n,表示圆圈上有n个点
第二行n个整数,分别表示第1个点与第2个点之间圆弧的长度、第2个点与第3个点之间圆弧的长度······第n个点与第1个点之间圆弧的长度
<= n <= ^
<= x_i <= ( <= i <= n)
输出 如果可以组成等边三角形则输出"Yes"(不含引号)
否则输出"No"(不含引号)
样例输入 样例输入1: 样例输入2: 样例输出 样例输入1:
Yes 样例输入2:
Yes
题目描述(L: 寄蒜几盒?)
题解:
预备知识补充:
(1):在同圆或等圆中,相同的圆心角对应的弦相等,对应的弧也相等。L: 寄蒜几盒?
会了这个知识,那这道题差不多就做出来了。
相关变量解释:
sum[maxn]:..................................sum[ i ]表示第1个点距第i+1个点的距离 ,也就是前缀和。
步骤:
(1):特判圆周长sum[ n ]是否整除3,如果不整除,直接输出"No"。
(2):如果sum[ n ]整除3,遍历一遍数组,判断是否含有三点a,b,c,使得ab,bc,ca间的距离等于sum[ n ]/3,如果有,输出"Yes",否则输出"No"。
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e6+; int n;
int a[maxn];
int sum[maxn]; bool isSat(int p1,int p2){//判断p1,p2点是否在范围内
return p1 <= sum[n] && p2 <= sum[n];
}
bool Check(int p1)//二分查找
{
int l=,r=n+;
while(r-l > )
{
int mid=l+((r-l)>>);
if(sum[mid] == p1)
return true;
if(sum[mid] < p1)
l=mid;
else
r=mid;
}
return false;
}
char *Solve()
{
if(sum[n]% != )//特判
return "No";
int d=sum[n]/;
for(int i=;i <= n;++i)//遍历所有点,判断是否含有满足条件的三个点
{
int p1=sum[i]+d,p2=sum[i]+*d;
if(isSat(p1,p2) && Check(p1) && Check(p2))//二分查找点p2,p2是否存在
return "Yes";//如果存在,返回"Yes"
}
return "No";
}
int main()
{
scanf("%d",&n);
sum[]=;
for(int i=;i <= n;++i)
scanf("%d",a+i),sum[i]=sum[i-]+a[i];//前缀和 printf("%s\n",Solve());
}
对算法时间复杂度的分析:
每遍历一个点都需要log(n)的复杂度查找是否含有p1,p2点,一共遍历了n个点,所以总的时间复杂度为O( nlog(n) ),106完全可以过。
2018.11.26 QLU新生赛部分题解的更多相关文章
- EZ 2018 05 26 NOIP2018 模拟赛(十六)
这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...
- EZ 2018 02 26 NOIP2018 模拟赛(一)
这次是校内OJ(HHHOJ)线上比赛,网址:http://211.140.156.254:2333/contest/51 (我去刚刚快写完了手贱关掉了) 这次总体难度也不高,T1&&T ...
- 2018.11.26 struts2流程源码
struts2的架构图 从最上面的类开始,也就是i 我们的核心过滤器strutsPrepareAndExecuteFilter 判断当前请求是否由struts2来处理,如果是就往else走,不由它来处 ...
- 2018.10.26 NOIP2018模拟赛 解题报告
得分: \(0+10+10=20\)(\(T1\)死于假题面,\(T3\)死于细节... ...) \(P.S.\)由于原题是图片,所以我没有上传题目描述,只有数据. \(T1\):颜料大乱斗(点此看 ...
- 2018.11.7 PION 模拟赛
期望:100 + 80 + 75 = 255 实际:0 + 80 + 60 = 140 唉~一天比一天犯的错误智障,感觉noip要凉啊... 吓得我赶紧吃几颗药补补脑子. 奶一下大佬: lgj AK ...
- 2018.11.6 PION 模拟赛
期望:100 + 40 + 50 = 190 实际:60 + 10 + 50 = 120 考得好炸啊!!T1数组开小了炸掉40,T2用 int 读入 long long ,int存储 long lon ...
- 2018.11.5 PION模拟赛
期望:30 + 40 + 50 = 120 实际:30 + 50 + 40 = 120 ‘’ 思路:最重要的是发现 是完全没有用的,然后这个题目就可以转成DP来做. /* 期望的分:30 */ #in ...
- 2018.11.3 PION模拟赛
期望:100 实际:100 #include<cstdio> #include<cstring> #include<iostream> #include< ...
- 2018 11.2 PION模拟赛
期望:100 + 50 + 30 = 180 实际:0 + 50 + 30 =80 期望:100 实际:0 数值有负数,边界应该设为-0x7f 此处 gg /* 期望的分:50+ */ ...
随机推荐
- cmd & tree & bash
cmd & tree & bash bug E: Unable to locate package tree solution # 1. update $ sudo apt-get u ...
- python学习 第二天
一.变量 1.变量名: 数字,字母,下划线 alex1=123 sb=“alex” a_lex=“sb” 不能以数字开头 lalex 变量名不是python内部的关键字 {‘and’,'as','as ...
- $mount(“#app”)手动挂载
没有el属性时,证明vue还没绑定到特定的dom上,需要延迟加载,则使用.$mount("")进行手动挂载 https://blog.csdn.net/longzhoufeng/a ...
- python之类和__init__
构建一个商品类,__init__函数类似于构造方法,self类似于this import random class Goods: def __init__(self, name, price): se ...
- vim指令
编辑-->输入: i: 在当前光标所在字符的前面,转为输入模式: a: 在当前光标所在字符的后面,转为输入模式: o: 在当前光标所在行的下方,新建一行,并转为输入模式: I:在当前光标所在行的 ...
- [WC2018]即时战略——动态点分治(替罪羊式点分树)
题目链接: [WC2018]即时战略 题目大意:给一棵结构未知的树,初始时除1号点其他点都是黑色,1号点是白色,每次你可以询问一条起点为白色终点任意的路径,交互库会自动返回给你这条路径上与起点相邻的节 ...
- Matplotlib学习---matplotlib的一些基本用法
Matplotlib有两种接口,一种是matlab风格接口,一种是面向对象接口.在这里,统一使用面向对象接口.因为面向对象接口可以适应更复杂的场景,在多图之间进行切换将变得非常容易. 首先导入matp ...
- hdu 2191 (多重背包二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 实现代码: #include<bits/stdc++.h> using namespac ...
- HNOI2019 退役记
窗外风雨大作. 凌晨两点又被噩梦惊醒,朦胧中看见书桌的灯还亮着. 走近书桌,有一个人正在敲打着键盘,屏幕上是一些似曾相识的东西. 被水浸湿的头发随意地搭在额头上,鼻梁上架着一副眼镜,镜片上全是小水珠, ...
- Codeforces Round #554 ( div.2 ) 总结
应该经常需要锻炼一下英语阅读理解能力和代码能力,所以以后还是需要多打打CF. 今天大概就是水一水找找感觉. A. Neko Finds Grapes $n$个箱子,$m$个钥匙 ($n,m \leq ...