Description

给定n根直的木棍,要从中选出6根木棍,满足:能用这6根木棍拼
出一个正方形。注意木棍不能弯折。问方案数。
正方形:四条边都相等、四个角都是直角的四边形。

Input

第一行一个整数n。
第二行包含n个整数ai,代表每根木棍的长度。
n ≤ 5000, 1 ≤ ai ≤ 10^7

Output

一行一个整数,代表方案数。
考虑正方形每条边由几条木棍组成,只有1122和1113两种情况,分别枚举统计一下
#include<bits/stdc++.h>
typedef long long i64;
int n,a[],ap=,as[],at[],t[];
i64 ans=,c3[];
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",a+i);
std::sort(a+,a+n+);
for(int i=,j=;i<=n;i=j){
int x=a[i];
for(;j<=n&&a[j]==x;++j);
c3[ap]=i64(j-i)*(j-i-)*(j-i-)/;
as[ap]=x;
at[ap++]=j-i;
}
for(int i=;i<=n;++i){
for(int j=;j<ap;++j)if(as[j]>a[i]){
ans+=c3[j]*t[as[j]-a[i]];
}
for(int j=;j<i&&a[i]+a[j]<=;++j)++t[a[i]+a[j]];
}
for(int i=,l,r;i<ap;++i)if(at[i]>=){
i64 s=,s0=,s1;
for(r=i-,l=;r>=l;--r){
for(;r>=l&&as[l]+as[r]<as[i];++l);
if(r<l||as[l]+as[r]!=as[i])continue;
int x=at[l];
if(r==l){
s1=x*(x-)/;
s+=s1*(x-)*(x-)/;
}else{
int y=at[r];
s1=x*y;
s+=s1*(x-)*(y-)/;
}
s+=s0*s1;
s0+=s1;
}
ans+=at[i]*(at[i]-)/*s;
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. Map排序
  2. 结对编程项目——四则运算vs版
  3. insertBefore的兼容性问题
  4. iOS9开发之新增通知行为详解
  5. DrawerLayout和toolbar的使用
  6. [Javascript] Writing conventional commits with commitizen
  7. (转载)让ie6也支持max-width,和max-height实现图片等比例缩放
  8. 兼容 CommonJS 和 CommonJS-like规范(1~38)
  9. JavaScrtip之JS最佳实践
  10. Segment,Path,Ring和Polyline对象
  11. 简说JS中的循环部分
  12. Java冒泡法和二分法
  13. java使用jxl,poi解析excel文件
  14. some knowledge of language
  15. 关于springboot整合配置pagehelper插件的方法
  16. SpringBoot之Mybatis操作中使用Redis做缓存
  17. 内存分配方式,堆区,栈区,new/delete/malloc/free
  18. Oracle&#160;修改SYS、system用户密码
  19. 前端基础(CSS)
  20. 利用MSXSL.exe绕过AppLocker应用程序控制策略

热门文章

  1. 数据库schema的简介
  2. 【LeetCode 234_链表】Palindrome Linked List
  3. 电脑同时安装python2和python3, 如何实现切换使用
  4. 20165210 Java第六周学习总结
  5. Linux 内核链表实现和使用(一阴一阳,太极生两仪~)
  6. E - An Awful Problem 求两段时间内满足条件的天数//lxm
  7. 详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程
  8. SSH MVC
  9. matlab学习笔记 函数bsxfun repmat
  10. 51Nod:1086背包问题 V2