ACdream 1067:Triangles

Problem Description

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

Input

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

Output

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

Sample Input

3
4
5

Sample Output

1
0
5

分析:当3个点组成锐角三角形ABC时,圆心O一定在三角形内部,∠AOB , ∠BOC, ∠COA一定小于180度(∠AOB  +  ∠BOC + ∠COA = 360度)

(1)当N为偶数时,用1, 2 .... k ,  k+1,  .... , 2k来标记N个点(2K = N).  固定一个点,  如点A = 点k, 那么2k点是肯定不能选的了,因为 k, 2k组成一条直径。

           所以剩下两个区间 [1, k-1],  [K+1, 2k-1].如果点B, 点C同处一个区间,那么ABC一定是一个钝角三角形,所以B,C一定不可处于同一区间。

           设点B = 点x, x 属于[1, k-2];   点C=点y,y 属于[k+1, 2k-1];

           在这样的情况下,y - x > k 才能使得ABC为锐角三角形  ==> (x, y)的取值有S =  0 + 1 + 2 + ... + (k - 2) = (k -1) * (k -2) /2  = (N/2 - 1) * (N / 2 - 2) / 2 ;
           有N个点,每个三角形被重复计算3次,所以一共有 S * N / 3种;

(2)点N为奇数时, k = N / 2.  用0,  1 ... k ,  k + 1,  2k.
         固定点A = 点0,则过点A的直径把N个点分成[1, k],   [k+1, 2k]两个部分。和(1)同理,可以令  点B = 点x , x 属于[1, k],  点C = 点y,  y 属于[k+1, 2k];

          在这样的情况下,y - x <=  k 才能使得ABC为锐角三角形  ==> (x, y)的取值有S =  k + (k- 1) + ... + 1 = k  * (k +1)  /2  = (N/2) * (N / 2 + 1) / 2 ;

          有N个点,每个三角形被重复计算3次,所以一共有 S * N / 3种;

综上:

N 为偶数时,     ans = N *  (N/2 - 1) * (N / 2 - 2) / 6;

N为奇数时,      ans = N * (N/2) * (N / 2 + 1) / 6;


#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define ll long long

int main()
{
    ll n,k,ans;
    while(~scanf("%lld",&n))
    {
        if(n<3)
            ans = 0;
        else if(n%2)
            ans = (1+n/2)*(n/2)*n/6;
        else
            ans = (n/2-2)*(n/2-1)*n/6;
        printf("%lld\n",ans);
    }

    return 0;
}

ACdream 1067:Triangles

时间: 2024-10-12 04:38:25

ACdream 1067:Triangles的相关文章

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

A - A Very Easy Triangle Counting Game Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit Status Practice ACdream 1008 Description Speedcell and Shoutmon love triangles very much.One day,they are playing a game named “T

1.5.1 Number Triangles 数字金字塔

★1.5.1 Number Triangles 数字金字塔 一.题目描述 考虑在下面被显示的数字金字塔. 写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大. 每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大和:30 PROGRAM NAME: numtri 18 INPUT FORMAT 第一个行包含 R(1<= R<=1000) ,表示行的数目

UVA - 12075 Counting Triangles

Description Triangles are polygons with three sides and strictly positive area. Lattice triangles are the triangles all whose vertexes have integer coordinates. In this problem you have to find the number of lattice triangles in anMxN grid. For examp

ytu 1067: 顺序排号(约瑟夫环)

1067: 顺序排号Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 31  Solved: 16[Submit][Status][Web Board] Description 有n人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位. Input 初始人数n Output 最后一人的初始编号 Sample Input 3 Sample Output 2 HINT Source freepro

UVALive 7077 Little Zu Chongzhi&#39;s Triangles (有序序列和三角形的关系)

这个题……我上来就给读错了,我以为最后是一个三角形,一条边可以由多个小棒组成,所以想到了状态压缩各种各样的东西,最后成功了……结果发现样例过不了,三条黑线就在我的脑袋上挂着,改正了以后我发现N非常小,想到了回溯每个棍的分组,最多分5组,结果发现超时了……最大是5^12 =  244,140,625,厉害呢…… 后来想贪心,首先想暴力出所有可能的组合,结果发现替换问题是一个难题……最后T T ,我就断片了.. 等看了别人的办法以后,我才发现我忽视了三角形的特性,和把数据排序以后的特点. 如果数据从

MySQL在windows系统中修改datadir路径后无法启动问题,报错1067

windows server2008下如何更改MySQL数据库的目录的帖子已经很多了,这里简单介绍一个步骤,如果不成功请先查看其它帖子. 更改默认的mysql数据库目录 将 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data 改到 D:\MysqlData 1. 建立文件夹 D:\MysqlData 2. 停止 mysql 服务,将 "C:\Documents and Settings\

Windows(7)上不能启动MySQL服务(位于本地计算机上)错误1067 :进程意外终止

就这段时间,很多人在抱怨为什么自己的MySQL又打不开问题. 就“Windows(7)上不能启动MySQL服务(位于本地计算机上)错误1067 :进程意外终止”这个问题,我想到了几种方案解决: 一.首先在windows的服务中确定mysql服务是否开启, 如果你在windows的服务中找不到mysql的服务,这时你需要安装mysql服务. 安装过程可以使用命令行的形式,输入下面的命令,5.1之后的版本的命令:>> mysqld.exe -install(这里我在path设置的MySQL安装文件

Codeforces Gym 100015F Fighting for Triangles 状态压缩DP

F Fighting for Triangles Description Andy and Ralph are playing a two-player game on a triangular board that looks like the following: 1 234 5 7 86 910 11 13 14 16 1712 15 18 At each turn, a player must choose two adjacent vertices and draw a line se

Project Euler 91:Right triangles with integer coordinates 格点直角三角形

Right triangles with integer coordinates The points P (x1, y1) and Q (x2, y2) are plotted at integer co-ordinates and are joined to the origin, O(0,0), to form ΔOPQ. There are exactly fourteen triangles containing a right angle that can be formed whe