题目描述

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

输入输出格式

输入格式:

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

输出格式:

所构成不重复矩形的个数

输入输出样例

输入样例#1:

8
1
2
2
3
1
1
3
3
输出样例#1:

3

说明

N<=20

Solution:

  本题看似很水(确实很水),自己的想法却不够简便。

  开始写了个暴力枚举$4$个点然后判断,老是处理不了重复的情况搞了半天一直$40$分。

  其实,我们只需要处理出前缀和,然后$n^2$枚举$i,j$,当$s[j]-s[i]==s[n]/2$时,计数器$ans++$,因为我们知道矩形的两条邻边所成的圆周角$=\pi$,所以弧长为$\frac{c}{2}$($c$为圆的周长),于是我们这样统计出来的是满足条件的成对角的点对个数,那么最后的答案就是$ans*(ans-1)/2$(简单的组合,每个点对可以和剩下$ans-1$个点对搭配组成矩形,然后每个会重复算一次,所以除以$2$就$OK$了)。

代码:

#include<bits/stdc++.h>
#define il inline
#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
using namespace std;
const int N=;
int n,a[N],s[N],ans;
il void solve(){
For(i,,n) For(j,,n)if(s[j]-s[i]==s[n]/)ans++;
cout<<ans*(ans-)/;
}
int main(){
ios::sync_with_stdio();
cin>>n;
For(i,,n)cin>>a[i];
For(i,,n)s[i]=s[i-]+a[i];
solve();
return ;
}

最新文章

  1. 20个非常棒的jQuery倒计时脚本
  2. PHP 模拟 HTTP 基本认证(Basic Authentication)
  3. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q45-Q48)
  4. abrtd是什么进程
  5. android: 播放音频
  6. NV OIT algorithm : Depth peeling is a fragment-level depth sorting technique
  7. 2015-10-11 Sunday 晴 ARM学习
  8. INI解析模块的C++实现
  9. 开源的Android开发框架-------PowerFramework使用心得(五)网络请求HTTPRequest
  10. (原)不明白JNI指针调用顺序
  11. JS复习:第二十三章
  12. codeforces 803C Maximal GCD(GCD数学)
  13. javascript内存管理(堆和栈)和javascript运行机制
  14. day2-Python基本数据类型介绍
  15. express+handlebars 快速搭建网站前后台
  16. 牛客网 272B Xor Path(树上操作)
  17. 浏览器登录Dynamics 365 CE没毛病,程序连接却报错。
  18. C#运行时通过字符串实例化类对象
  19. 2017-5-5/PHP实现负载均衡的加权轮询
  20. 炫龙笔记本的gtx965m显卡玩游戏很卡

热门文章

  1. NOIP2018初赛 解题报告
  2. NOIP2018赛前停课集训记(10.24~11.08)
  3. tableviewcell折叠问题,(类似qq列表展开形式) 多个cell同时展开,OC版 和 Swift
  4. CUDA 中dim3含义
  5. 梁勇Java语言程序设计第三章全部例题 为第五次作业
  6. 1046: [HAOI2007]上升序列
  7. Apache 配置默认编码
  8. web前端-回调函数sort详解
  9. hadoop核心组件概述及hadoop集群的搭建
  10. Java总结 - List实现类ArrayList&amp;LinkedList