Problem Description

已知一个圆的圆周被N个点分成了N段等长圆弧,求任意取三个点,组成锐角三角形的个数。

Input

多组数据,每组数据一个N(N <= 1000000)

Output

对于每组数据,输出不同锐角三角形的个数。

Sample Input

  1. 3
  2. 4
  3. 5

Sample Output

  1. 1
  2. 0
  3. 5
  1.  
  1. 分析:当3个点组成锐角三角形ABC时,圆心O一定在三角形内部,∠AOB , BOC, COA一定小于180度(∠AOB  +  BOC + COA = 360度)
  2.  
  3. 1)当N为偶数时,用1, 2 .... k ,  k+1,  .... , 2k来标记N个点(2K = N).  固定一个点,  如点A = k 那么2k点是肯定不能选的了,因为 k, 2k组成一条直径。
  4.  
  5.            所以剩下两个区间 [1 k-1],  [K+1, 2k-1].如果点B C同处一个区间,那么ABC一定是一个钝角三角形,所以BC一定不可处于同一区间。
  6.  
  7.            设点B = x x 属于[1, k-2];   C=点yy 属于[k+1, 2k-1];
  8.  
  9.            在这样的情况下,y - x > k 才能使得ABC为锐角三角形  ==> (x, y)的取值有S =  0 + 1 + 2 + ... + (k - 2) = (k -1) * (k -2) /2  = (N/2 - 1) * (N / 2 - 2) / 2 ;
  10.            N个点,每个三角形被重复计算3次,所以一共有 S * N / 3种;
  11.  
  12. 2)点N为奇数时, k = N / 2.  0,  1 ... k ,  k + 1,  2k.
  13.          固定点A = 0,则过点A的直径把N个点分成[1, k],   [k+1, 2k]两个部分。和(1)同理,可以令  B = x , x 属于[1, k],  C = y  y 属于[k+1, 2k];
  14.  
  15.           在这样的情况下,y - x <=  k 才能使得ABC为锐角三角形  ==> (x, y)的取值有S =  k + (k- 1) + ... + 1 = k  * (k +1)  /2  = (N/2) * (N / 2 + 1) / 2 ;
  16.  
  17.           N个点,每个三角形被重复计算3次,所以一共有 S * N / 3种;
  18.  
  19. 综上:
  20.  
  21. N 为偶数时,     ans = N *  (N/2 - 1) * (N / 2 - 2) / 6
  22.  
  23. N为奇数时,      ans = N * (N/2) * (N / 2 + 1) / 6
  1.  
  1.  
  1.  
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5. #define ll long long
  6. int main()
  7. {
  8. ll n,k,ans;
  9. while(~scanf("%lld",&n))
  10. {
  11. if(n<3)
  12. ans = 0;
  13. else if(n%2)
  14. ans = (1+n/2)*(n/2)*n/6;
  15. else
  16. ans = (n/2-2)*(n/2-1)*n/6;
  17. printf("%lld\n",ans);
  18. }
  19. return 0;
  20. }

ACdream 1067:Triangles的更多相关文章

  1. acdream.Triangles(数学推导)

    Triangles Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit Stat ...

  2. acdream.A Very Easy Triangle Counting Game(数学推导)

    A - A Very Easy Triangle Counting Game Time Limit:1000MS     Memory Limit:64000KB     64bit IO Forma ...

  3. 本地无法启动MySQL服务,报的错误:1067,进程意外终止

    在本地计算机无法启动MYSQL服务错误1067进程意外终止 这种情况一般是my.ini文件配置出错了 首先找到这个文件: 默认安装路径 C:/Program Files/MySQL/MySQL Ser ...

  4. Count the number of possible triangles

    From: http://www.geeksforgeeks.org/find-number-of-triangles-possible/ Given an unsorted array of pos ...

  5. MySQL数据库1067 问题

    1.MySql1067错误解决方法 http://blog.csdn.net/mhmyqn/article/details/17043921   MySql 1045解决方法 my.ini  mysq ...

  6. mysql 在windows下,使用 net start mysql 命令发生错误 服务名无效 或 1067

    mysql 在windows下,使用 net start mysql 命令发生错误 :服务名无效 或 1067  先使用mysqld -install安装一下 删除data目录下的日志等文件(因为之前 ...

  7. 启动mysql服务 报1067 错误

    启动mysql 报1067 错误         一般报1067错误,先看一下data/my.ini配置文件 中的路径 datadir ,log-bin ,log-error 报1067错误原因 多种 ...

  8. win764位下安装mysql-5.6.22-x64启动服务报 系统错误 1067的解决办法

    本人电脑win7,64位,需要安装mysql服务器.版本:mysql-5.6.22-x64.安装完成后,在服务里面并没有mysql.于是在百度上搜了下,好多信息,最后把解决方法自己总结下. 在${pr ...

  9. PAT 1067. Sort with Swap(0,*)

    1067. Sort with Swap(0,*) (25)   Given any permutation of the numbers {0, 1, 2,..., N-1}, it is easy ...

随机推荐

  1. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(尺取)题解

    题意:n个城市,初始能量c,进入i城市获得a[i]能量,可能负数,去i+1个城市失去b[i]能量,问你能不能完整走一圈. 思路:也就是走的路上能量不能小于0,尺取维护l,r指针,l代表出发点,r代表当 ...

  2. 【Map】Echarts之iphone销量地图的使用以及详细配置

    1.引入echarts库文件 <script charset="utf-8" type="text/javascript" language=" ...

  3. java中年月日的加减法,年月的加减法使用

    本文为博主原创,未经允许不得转载: java计算两个年月日之间相差的天数: public static int daysBetween(String smdate,String bdate) thro ...

  4. Ubuntu 14.04 更新gcc版本至4.9.2

    参考: ubuntu 14.04 更新 gcc/g++ 4.9.2 Ubuntu 14.04 更新gcc版本至4.9.2 1.更新源,安装gcc v4.9.2 $ sudo add-apt-repos ...

  5. HDU 5887 Herbs Gathering(搜索求01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=5887 题意: 容量很大的01背包. 思路: 因为这道题目背包容量比较大,所以用dp是行不通的.所以得用搜索来做, ...

  6. go 通道

    1. package main import "fmt" func sum(s []int, c chan int) { sum := for _, v := range s { ...

  7. 安装Zookeeper和kafka,安装完毕后,遇到的错误

    按照原文链接 http://www.cnblogs.com/swneng/p/10212460.html 在windows下进行安装 之后运行 D:\00H_Bigdata\kafka_2.11-2. ...

  8. 模版层Template layer

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  9. MyEclipse快捷键大全【转】

    -------------------------------------MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl+1 ...

  10. MyBatis3-基于注解的示例

    在基于注解的示例中,可以简化编写XML的过程,全部采用注解方式进行编写,并在注解上写SQL语句,语句和XML的语句保持一致,并且可以省略掉XML文件不用引入的好处.但还有一点,基于注解的方式还没有百分 ...