1800: [Ahoi2009]fly 飞行棋

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 1622  Solved: 1293
[Submit][Status][Discuss]

Description

给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列。 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形。

Input

第一行为正整数N,表示点的个数,接下来N行分别为这N个点所分割的各个圆弧长度

Output

所构成不重复矩形的个数

Sample Input

8
1
2
2
3
1
1
3
3

Sample Output

3

HINT

N<= 20

这个题需要有初中数学的基础,因为圆的内接矩形,他的对角线是直径,所以,就要找出直径的条数,然后将直径两两组合,每两条不同的直径可以组成一个矩形,这里用到组合数,

答案就是C(2,直径条数)

如何求直径条数呢

就是将若干条连续弧相加,使等于圆周长一半就是直径,弧的端点就是直径的端点

我们有一种比较慢的方法求直径条数,复杂度n^2

for(int i=;i<n;++i)
for(int j=;j<n;++j)
if(s[j]-s[i-]==number) //number是圆周长的一半,s是前缀和
       ans++;

其实这种方法也不是太慢,也就比快的方法慢几MS,可能是数据小吧……

有一种比较快的方法

和一道题思路基本一致

洛谷 P1115 最大子段和

这是代码

#include<iostream>
using namespace std; int main()
{
int n;
cin>>n;
int sum=,maxl=;
for(int i=;i<=n;++i)
{
int number;
cin>>number;
sum+=number;
maxl=max(sum,maxl);
if(sum<)sum=;
}
cout<<maxl;
return ;
}

最大子段和

我们就稍微改一改就能将上面那个比较慢的方法变成线性啦

int total=;
int ans=;
for(int i=,j=;i<n;++i)
{
total+=s[i];
while(total>number)
total-=s[j++];
if(total==number)
ans++;
}

只是一定要注意两个地方容易出错

1、循环到n-1

2、while(total>number)

     total-=s[j++];如果不用while的话,结果可以想象……不是会变慢的问题,是答案有可能不对的问题……

完整代码如下
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std; int s[],f[];
int n,number=; void quit()
{
printf("");
exit();
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;++i)
{
scanf("%d",&s[i]);
number+=s[i];
f[i]=f[i-]+s[i];
}
if(number&)quit();
number>>=;
int total=;
int ans=;
for(int i=,j=;i<n;++i)
{
total+=s[i];
while(total>number)
total-=s[j++];
if(total==number)
ans++;
}
if(ans<)quit();
printf("%d",ans*(ans-)>>);
return ;
}

这个题也是比较水的……相对于BZOJ的其他题……

 

BZOJ 1800的更多相关文章

  1. [BZOJ 1800] 飞行棋

    Link: BZOJ 1800 传送门 Solution: $O(n^4)$…… Code: #include <bits/stdc++.h> using namespace std; ] ...

  2. bzoj 1800: [Ahoi2009]fly 飞行棋 暴力

    1800: [Ahoi2009]fly 飞行棋 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  3. BZOJ 1800: [Ahoi2009]fly 飞行棋( 枚举 )

    O(N2)算出有x条直径然后答案就是x(x-1)/2...这个数据范围是闹哪样! ----------------------------------------------------------- ...

  4. BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】

    1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1689  Solved: 1335[Submit][St ...

  5. bzoj 1800 & 洛谷 P2165 [AHOI2009]飞行棋 —— 模拟

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1800   https://www.luogu.org/problemnew/show/P21 ...

  6. bzoj 1800 [Ahoi2009]fly 飞行棋——模拟

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1800 原来只想到一个弧是一条边. 然后发现不是.差点不会做.经Zinn提醒,不用枚举那条边由 ...

  7. bzoj 1800 暴力枚举

    直接暴力枚举四个点,然后判断是否能组成矩形就行了 注意枚举的点的标号从小到大,保证不重复枚举 /**************************************************** ...

  8. BZOJ 1800 fly-飞行棋

           这道题其实考察的就是从其中能找到几条直径,因为这次数据范围比较小,所以只需设一个二维数组,记录一下每个点及每个点从零开始的位置,最后定一个变量记录周长,最后用个循环搜一下位置小于周长一半 ...

  9. BZOJ 1800 [Ahoi2009]fly 飞行棋

    题目链接 思路 终于有一道自己想出来的题了,开心. 因为是矩形,一定有直角,所以考虑直径,之后由于矩形对角线是两条直径,所以考虑组合数. 直径有n条,矩形有c(n,2)个. #include<i ...

随机推荐

  1. Linux下的命令行

    一.文件传输(两种方式) 1. 使用CRT传输 1. 一定要修改编码为UTF-8类型 1. 按住alt + p 切换成传输文件的窗口,然后拖拽文件进来即可 2. 使用类似xftp这种软件传输 这种软件 ...

  2. 英特尔CEO科再奇:尚未发现通过漏洞获取用户数据的行为

    1月9日消息,英特尔CEO科再奇在美国西部时间1月8日举行的2018年CES中发表主题演讲,他在开场时面向产业界谈到了最近报道的安全研究发现.科再奇表示:“在我们开始之前,我想借此机会感谢整个行业,为 ...

  3. Web-Servlet处理表单

  4. docker/qemu中是如何对设备管理的

    文件系统中包括实际的磁盘中可读可写的. 容器中看到的设备是啥子呢?--docker qemu也是一样,在qemu中添加一个设备的物理意义是啥子嘛 其实设备也没啥好新奇的,不就是一个普通的文件么,然后在 ...

  5. iBatis的基本使用

    项目结构: 依赖jar: 数据库依赖: CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, PRIMA ...

  6. BZOJ4668 冷战(并查集)

    显然可以用LCT维护kruskal重构树.或者启发式合并维护kruskal重构树的倍增数组虽然多了个log也不一定比LCT慢吧. 当然这里的kruskal重构树几乎只是把树上的边权换成了点权,并不重要 ...

  7. BZOJ1095 [ZJOI2007]Hide 捉迷藏 【动态点分治 + 堆】

    题目链接 BZOJ1095 题解 传说中的动态点分治,一直不敢碰 今日一会,感觉其实并不艰涩难懂 考虑没有修改,如果不用树形dp的话,就得点分治 对于每个重心,我们会考虑其分治的子树内所有点到它的距离 ...

  8. C&C++——C函数与C++函数相互调用问题

    C C++相互调用 在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题,但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题.近来在主程序是C语 ...

  9. 免费的dns服务器(更换dns服务器有时可以解决某些网站(如爱奇艺访问不了的问题))

    首先百度提供的dns就是非常好用的dns,小编就把百度的dns作为首选180.76.76.76.   其次是阿里提供的dns223.5.5.5,响应速度非常的快,而且没有广告劫持.   再就是最通用的 ...

  10. POJ2516:Minimum Cost(最小费用最大流)

    Minimum Cost Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 19088   Accepted: 6740 题目链 ...