ACDream 1067 Triangles
来源:互联网 发布:手机淘宝如何切换账号 编辑:程序博客网 时间:2024/05/01 19:12
Triangles
Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)
Submit Statistic Next Problem
Problem Description
已知一个圆的圆周被 N 个点分成了 N 段等长圆弧,求任意取三个点,组成锐角三角形的个数。
Input
多组数据。
每组数据一个N (N ≤ 1000000)。
Output
对于每组数据,输出不同锐角三角形的个数。
Sample Input
3
4
5
Sample Output
1
0
5
分析:我们可以两种点,一种偶数,一种奇数。
偶数时:
把每一个点分一个点,从1,2,3.。。。。,k,k+1……2k,点A我们假设分在1,那么在区间[2-k-2][k+1-2k],分别分有B,C,由于需要组成锐角三角形,所以我们不能在一个区间分两个点,且不能有点在k上,因为那会和A组成半径。切B-C的距离要比k值小。那么就有S = 0 + 1 + 2 + … + (k - 2) = (k -1) * (k -2) /2 = (N/2 - 1) * (N / 2 - 2) / 2 ,由于有n个点且每个点重复计算三次,s=s*n/3。
奇数时:
同上,k=n/2,,0,1,2,3,4,5……k…k+1…2k。A点在0,B,C区间分为[1-k],[k+1,2k],B-C<=k时满足锐角,S = k + (k- 1) + … + 1 = k * (k +1) /2 = (N/2) * (N / 2 + 1) / 2 ;,——->s=s*n/3;
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;//N 为偶数时, ans = N * (N/2 - 1) * (N / 2 - 2) / 6;//N为奇数时, ans = N * (N/2) * (N / 2 + 1) / 6;int main(){ long long n,s; while(scanf("%lld",&n)!=EOF) { if(n<3) printf("0\n"); if(n%2==0) s=n*(n/2-1)*(n/2-2)/6; else s=n*(n/2)*(n/2+1)/6; printf("%lld\n",s); } return 0;}
- ACdream 1067:Triangles
- acdream 1067 Triangles (结论)
- ACDream 1067 Triangles
- ACdream 1067:Triangles
- ACdream Triangles
- ACDream 1024:Triangles
- Triangles
- Triangles
- Triangles
- Triangles
- Triangles
- Triangles
- ACDream 1067 Convex
- ACdream
- Acdream
- ACdream
- ACdream
- ACdream
- C++ explicit的作用
- Linux学习-图片云
- Java实现LRU算法
- 数据结构:串
- Java--线程的先后执行顺序控制
- ACDream 1067 Triangles
- Python内置的字符串处理函数
- HDU 5742 It's All In The Mind 水题
- angularJS绑定数据中对标签转义的处理
- PHP中 D()和M()方法的区别
- gcc 内联汇编用法介绍
- 对抽象类和接口的理解
- 交叉排序
- CAFFE layers