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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-12 09:38:57