UVA - 11186-Circum Triangle

有个以坐标原点为圆心的圆,给出圆上的点的关于x轴的夹角,以及圆的半径,求圆上点所能构成的三角形的面积和

我的做法:

先算出每个点的坐标,枚举所有三个点的组合,叉积求面积

我的代码:

#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const double pi=acos(-1.0);
struct dot
{
	double x,y;
	dot(){}
	dot(double a,double b){x=a,y=b;}
	friend dot operator -(dot a,dot b){return dot(a.x-b.x,a.y-b.y);}
	friend double operator /(dot a,dot b){return a.x*b.x+a.y*b.y;}
	friend double operator *(dot a,dot b){return a.x*b.y-a.y*b.x;}
};
double dis(dot a,dot b)
{
	return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
}
double cang(dot a,dot b)
{
	return acos(a/b/dis(a,dot(0,0))/dis(b,dot(0,0)));
}
double cg1(double a)
{
	return a/pi*180;
}
double cg2(double a)
{
	return a/180*pi;
}
int main()
{
	int n,i,j,k;
	double r,t,ans;
	dot a[510];
	while(cin>>n>>r)
	{
		if(n+r==0)
			break;
		for(i=0;i<n;i++)
		{
			cin>>t;
			t=cg2(t);
			a[i]=dot(r*cos(t),r*sin(t));
		}
		ans=0;
		for(i=0;i<n;i++)
			for(j=i+1;j<n;j++)
				for(k=j+1;k<n;k++)
					ans+=fabs((a[j]-a[i])*(a[k]-a[i])/2);
		printf("%.0lf\n",ans);
	}
}
时间: 2024-10-29 19:08:57

UVA - 11186-Circum Triangle的相关文章

uva 11186 - Circum Triangle(几何)

题目链接:uva 11186 - Circum Triangle 枚举两点,计算该两点与圆心构成的三角形对ans的贡献值. #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int maxn = 505; const double pi = 4 * atan(1); double A[maxn]; doub

UVA 11186 - Circum Triangle(计算几何+容斥)

这题用n^2的算法能过,先任意枚举两点,和圆心组成的三角形求面积,这个面积可能会被加(n - 2)次,但是要注意,如果有3点是在同一侧,那么要减去,于是在枚举一遍,每次枚举一个点,然后枚举和这个点度数相差180以内的点,求面积,这个面积要减去2 * (j - i + 1)次 代码: #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespac

UVA - 11186 Circum Triangle (几何)

题意:有N个点,分布于一个圆心在原点的圆的边缘上,问所形成的所有三角形面积之和. 分析: 1.sin的内部实现是泰勒展开式,复杂度较高,所以需预处理. 2.求出每两点的距离以及该边所在弧所对应的圆周角.一条弧所对圆周角等于它所对圆心角的一半. 3.S = 1/2*absinC求三角形面积即可. #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<c

【UVA】11437 Triangle Fun(简单几何)

先求出在A,B,C上的三等分点在,这里使用向量运算进行加减就行了. 之后通过求出的三等分点 和 顶点的连线,求出3个交点. 最后用求出的三个交点算出面积. 注意:由于可能是钝角三角形,需要求其绝对值. 14116428 11437 Triangle Fun Accepted C++ 0.015 2014-08-30 03:27:36 #include <iostream> #include <cstdlib> #include <cstdio> #include <

【UVA 11401】Triangle Counting

题 题意 求1到n长度的n根棍子(3≤n≤1000000)能组成多少不同三角形. 分析 我看大家的递推公式都是 a[i]=a[i-1]+ ((i-1)*(i-2)/2-(i-1)/2)/2; 因为以最大长度i 为最大边的三角形有 第二边为i-1.i-2....2 分别有 i-2个.i-3.... .1个,总共就有(i-1)*(i-2)/2个. 2 到 i-1 做第二边时,有(i-1)/2条边算到了两边相等,也就是要减去 (i-1)/2,因为第二边的在第三边出现了,所以算了两次,再除以2. 我的递

几何基础专题

UVA 11437 Triangle Fun UVA 11800 Determine the Shape 四边形判定 UVA 11646 Athletics Track UVA 11817 Tunnelling the Earth 球面距离 UVA 1473 Dome of Circus UVA 11524 InCircle UVA 11731 Ex-circles 旁切圆 UVA 12300 Smallest Regular Polygon UVA 10566 Crossed Ladders

uva11186

题目连接:UVA - 11186 意外发现这道题,最近发现贡献度这个东西很常见啊... 可是我什么都不会... 先存一下http://www.cnblogs.com/zhuanzhuruyi/p/6160694.html 1 #include<set> 2 #include<map> 3 #include<queue> 4 #include<stack> 5 #include<cmath> 6 #include<vector> 7 #

UVA - 11437 - Triangle Fun (计算几何~)

UVA - 11437 Triangle Fun Time Limit: 1000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description Problem A Triangle Fun Input: Standard Input Output: Standard Output In the picture below you can see a triangle ABC. Point D, E

UVA 11401 - Triangle Counting(数论+计数问题)

题目链接:11401 - Triangle Counting 题意:有1,2,3....n的边,求最多能组成的三角形个数. 思路:利用三角形不等式,设最大边为x,那么y + z > x 得 x - y < z < x 然后y取取值,可以从1取到x - 1,y为n时候,有n - 1个解,那么总和为0 + 1 + 2 +...+ (x - 2) = (x - 1) * ( x- 2) / 2; 然后扣除掉重复的y = z的情况,在y > x / 2时,每个y取值会出现一次y = z.

UVa 485 - Pascal&#39;s Triangle of Death

題目:打印Pascal三角到第一个到达10^60的行. 分析:字符串.大整數.模擬.f(i,j)= f(i-1,j-1)+ f(i-1,j) {組合數公式}. 說明:注意不小于10^60的數字有61位(⊙_⊙). #include <iostream> #include <cstdlib> #include <cstdio> using namespace std; int P[220][220][70] = {0}; int main() { for (int i =