[bzoj1800]fly 飞行棋<暴力>
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1800
说实话我这几天运气不错,随便在bzoj上找题都可以找到水题,这题在代码上没有丝毫难度,只是如果没想通的话可能做起来会比较吃力,因为暴力也是需要技巧的
方法:
这个图形是个圆,要在圆上找矩形。
然后矩形的特征是啥?四个角90度?好吧这不是重点,重点是矩形的对角线相等。
然后矩形是内接与这个圆的,所以我们又可以想到,圆的内接矩形对角线等于圆的直径。
直径,圆的任何一条直径将圆的面积分成相等的两半,直径所在的端点也将周长分成相等的两半。
只要想通这里,那么思路就来了,如果把弧长相加,能等于周长一半,说明找到一条直径,然后暴力搜索一遍找到所有直径,即所有的对角线。
然后你可以发现,每两条对角线都可以形成一个合法矩形,那么只要找出对角线数和矩形个数之间的关系就可以了。
关系:这个关系还是很好推的,想一想多边形顶点个数和对角线个数怎么找的,类比着找。
设有ans条对角线,每一条对角线都可以和剩下的ans-1条配对形成矩形,但是如果全部配对了会有重复,你随便画个图就可以发现,每个矩形都只是重复一次,
那么就直接除以2就行,所以公式就是 tot=(ans*ans)/2
然后这个主要步骤处理方法比较多,反正都是暴力,我举两个处理的小例子吧
例1:
for(int i=;i<n;i++)//sum是周长的一半
{
k+=dis[i];//k是累加的长度
while(k>sum)
{
k-=dis[++j];
}
if(k==sum)
{
ans++;
}
}
例2:
for(int i=;i<=n;i++)
//pos是与1配对的对角线另一点,找到这一个点是为了避免对角线重复
{
tot=;//tot和例1的k意义相同
for(int h=i;h<=n;h++)
{
tot+=dis[h];
if(tot>=sum)
{
if(i==)pos=h;
if(tot==sum)ans++;
break;
}
}
if(i>=pos)break;
}
暴力的方式还有很多,这就简单的介绍两种
然后我们看一看完整的代码
#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 25
using namespace std; int sum,ans,dis[maxn],k,j; int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&dis[i]);
sum+=dis[i];
}
sum=sum>>;
/* for(int i=1;i<n;i++)
{
k+=dis[i];
while(k>sum)
{
k-=dis[++j];
}
if(k==sum)
{
ans++;
}
}*/
int tot=,pos=;
for(int i=;i<=n;i++)
{
tot=;
for(int h=i;h<=n;h++)
{
tot+=dis[h];
if(tot>=sum)
{
if(i==)pos=h;
if(tot==sum)ans++;
break;
}
}
if(i>=pos)break;
} cout<<ans*(ans-)/;
return ;
}
[bzoj1800]fly 飞行棋<暴力>的更多相关文章
- bzoj 1800: [Ahoi2009]fly 飞行棋 暴力
1800: [Ahoi2009]fly 飞行棋 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- bzoj1800[Ahoi2009]fly 飞行棋 暴力枚举
找了道bzoj的水题,千年难得一遇. 建议初学者做做,然而我个蒟蒻初学时应该A不了..... < http://www.lydsy.com/JudgeOnline/problem.php?id= ...
- BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】
1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1689 Solved: 1335[Submit][St ...
- bzoj1800: [Ahoi2009]fly 飞行棋(乱搞)
1800: [Ahoi2009]fly 飞行棋 题目:传送门 题解: 大水题,早上签个到 没什么好说的...搞个前缀和,算个周长... 周长为奇数肯定误解啊废话QWQ 那么看到n<=20,还不暴 ...
- bzoj千题计划174:bzoj1800: [Ahoi2009]fly 飞行棋
http://www.lydsy.com/JudgeOnline/problem.php?id=1800 圆上两条直径构成矩形的对角线 #include<cstdio> using nam ...
- BZOJ 1800: [Ahoi2009]fly 飞行棋( 枚举 )
O(N2)算出有x条直径然后答案就是x(x-1)/2...这个数据范围是闹哪样! ----------------------------------------------------------- ...
- BZOJ_1800_[Ahoi2009]fly 飞行棋_乱搞
BZOJ_1800_[Ahoi2009]fly 飞行棋_乱搞 Description 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请找出这些点中有没有可以围成矩形的 ...
- BZOJ1800:fly 飞行棋 (双指针 组合数)
pro: 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形. N<20; sol:很可能被 ...
- BZOJ1800 [Ahoi2009]fly 飞行棋 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1800 题意概括 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请 ...
随机推荐
- 基础JavaScript练习(一)总结
任务目的 在上一任务基础上继续JavaScript的体验 接触一下JavaScript中的高级选择器 学习JavaScript中的数组对象遍历.读写.排序等操作 学习简单的字符串处理操作 任务描述 参 ...
- 从0开始搭建kafka客户端
上一节,我们实现了搭建kafka集群.本节我们将从0开始,使用Java,搭建kafka客户端生产消费模型. 1.创建maven项目2.kafka producer3.kafka consumer4.结 ...
- Go性能分析大杀器PPROF
这是什么 想要进行性能优化,Go本身自带的工具链就包含了性能分析工具,而且也非常棒,pprof就是Go性能分析的利器,它是Go语言自带的包,有如下两种: runtime/pprof:采集程序(非 Se ...
- 在centos7使用docker下搭建elasticsearch集群
一 .docker的安装 https://www.cnblogs.com/ghostdot/p/12410242.html 二.创建相关映射文件 cd /home/ mkdir node cd nod ...
- angular的开始历程
开始写angular了,抑制不住的开心,比react差点开心,vue开始太虐 喜欢一个人要不要表个白?其实也没啥资格喜欢~!!考虑一段时间吧 9.29表白了,嗯,被拒绝的干脆利落 为他写了一首小诗歌, ...
- Flink消费Kafka到HDFS实现及详解
1.概述 最近有同学留言咨询,Flink消费Kafka的一些问题,今天笔者将用一个小案例来为大家介绍如何将Kafka中的数据,通过Flink任务来消费并存储到HDFS上. 2.内容 这里举个消费Kaf ...
- Redis使用指南
原文链接 能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! 设置过期时间.释放资源 使用Redis做K-V存储,一定要注意过期时间的把控,任何K- ...
- go-admin基于Gin + Vue + Element UI的前后端分离权限管理系统
✨ 特性 遵循 RESTful API 设计规范 基于 GIN WEB API 框架,提供了丰富的中间件支持(用户认证.跨域.访问日志.追踪ID等) 基于Casbin的 RBAC 访问控制模型 JWT ...
- Java反射之Class类
接下来的几章,我们谈一谈java的反射机制. 反射就是从一个java类中映射出一个java类或是一个实例.通常在很多框架中都用到反射,比如常用的ssm框架,在配置文件中总是会写到类的全名,框架通过读取 ...
- xpath提取标签和内容
转:https://segmentfault.com/q/1010000012110138/a-1020000012113020 <div> <table> <tr> ...