bzoj1800飞行棋

题目链接

简单模拟

真的不敢相信ahoi09年的题竟然是这个难度

首先,一个必须要知道的定理是:圆上只有直径所对的圆周角是直角。

然后就很显然了,

只有两条不重合的直径上的四个点才能组成一个矩形,

所以统计有多少条直径,答案就是n(n1)2

直径的话,就意味着左半边长度=右半边的长度= 2

首先,当圆周长是奇数的时候,显然正整数内不存在任何一条直径。

对于周长是偶数

那么怎么统计有多少条直径呢?

维护一个前缀和就好了啊

上代码:

复制代码
/**************************************************************
    Problem: 1800
    User: zhangheran
    Language: C++
    Result: Accepted
    Time:76 ms
    Memory:1288 kb
****************************************************************/
 
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
int a[25];
int sum[25];
int calc(int xx){return xx*(xx-1)/2;} 
int num;int rp;
int main()
{
//  freopen("1.in","r",stdin);
//  freopen("1.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
    if(sum[n]%2||sum[n]<=0){puts("0");return 0;}
    for(int i=1;i<=n;i++)
      for(int j=i+1;j<=n;j++)
        if(sum[j]-sum[i]==sum[n]/2) num++;
    printf("%d",calc(num));
    return 0;
}
/*
 
7
19
16
14
2
4
12
3
 
*/
复制代码

 

posted @   米罗偕涯  阅读(306)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示