1.题目描述:点击打开链接
2.解题思路:本题是一道简单的计算几何题,统计一个图中有多少个三角形,由于给的时间很宽,完全可以用O(N^3)的算法来解决,判断是否构成三角形只需要用向量来判断三点是否共线即可。
3.代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define me(s) memset(s,0,sizeof(s))
#define For(i,n) for(int i=0;i<(n);i++)
#define pb push_back
#define sz size
#define clr clear
#define F(a,b) for(int i=a;b;i++)
struct Point
{
int x,y;
Point(int x=0,int y=0):x(x),y(y){}
Point operator +(const Point&p)const
{
return Point(x+p.x,y+p.y);
}
Point operator -(const Point&p)const
{
return Point(x-p.x,y-p.y);
}
void read()
{
scanf("%d%d",&x,&y);
}
}a[2005];
bool ok(int i,int j,int k)
{
Point e1=a[i]-a[j];
Point e2=a[i]-a[k];
if(e1.x*e2.y-e1.y*e2.x==0)return false;
return true;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
a[i].read();
ll cnt=0;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
for(int k=j+1;k<n;k++)
if(ok(i,j,k))
cnt++;
printf("%I64d\n",cnt);
}
return 0;
}