bzoj1800飞行棋
简单模拟
真的不敢相信ahoi09年的题竟然是这个难度
首先,一个必须要知道的定理是:圆上只有直径所对的圆周角是直角。
然后就很显然了,
只有两条不重合的直径上的四个点才能组成一个矩形,
所以统计有多少条直径,答案就是n(n−1)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 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术