🎊 计算三角形面积_三角形怎么算平方

计算三角形面积_三角形怎么算平方

大家好,又见面了,我是你们的朋友全栈君。

参考:已知三点坐标,求三角形面积1: 已知直角坐标系3点p(a,b),m(c,d),n(e,f)求三角形pmn面积两倍三角形面积是整型

代码模板:

代码语言:javascript代码运行次数:0运行复制ll solve(ll a,ll b,ll c,ll d,ll e,ll f)//计算两倍三角形面积

{

return abs(a*d+b*e+c*f-a*f-b*c-d*e);

}此写法可以不爆long long,之后再除以2即可

2: 若是由三条边求面积,则海伦公式模板为:

代码语言:javascript代码运行次数:0运行复制double hailun(double a,double b,double c)

{//保证尽量不爆long long

double s;

double pp=(a+b+c)/2.0;

double s1=sqrt(fabs(pp));

double s2=sqrt(fabs(pp-a));

double s3=sqrt(fabs(pp-b));

double s4=sqrt(fabs(pp-c));

s=s1*s2*s3*s4;

return s;

}3: 判断三点一线代码语言:javascript代码运行次数:0运行复制bool judge(node a,node b,node c)

{

return (c.x-a.x)*(b.y-a.y)-(c.y-a.y)*(b.x-a.x)!=0;

}参考例题:https://ac.nowcoder.com/acm/contest/327/A处女座的签到题

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 262144K,其他语言524288K

64bit IO Format: %lld

题目描述平面上有n个点,问:平面上所有三角形面积第k大的三角形的面积是多少?

输入描述第一行T,表示样例的个数。

对于每一组样例,第一行两个整数n和k,

接下来n行,每行两个整数x,y表示点的坐标

T<=80

3<=n<=100

-109<=x,y<=109

对于每一组样例,保证任意两点不重合,且能构成的三角形的个数不小于k

输出描述对于每一组样例,输出第k大三角形的面积,精确到小数点后两位(四舍五入)。

示例输入1

4 3

1 1

0 0

0 1

0 -1

输出0.50

说明样例中一共能构成3个三角形,面积分别为0.5,0.5,和1,面积第3大的为0.5

WA点:1,此题用海伦公式会爆double 和 long long

2,寻找第K大,若不用STL(nth_element),直接sort大法,会超时….

AC代码

代码语言:javascript代码运行次数:0运行复制#include

using namespace std;

#define sc(a) scanf("%d",&a)

#define sc2(a,b) scanf("%d%d",&a,&b)

#define sc3(a,b,c) scanf("%d%d%d",&a,&b,&c)

#define scl(a) scanf("%lld",&a)

#define scl2(a,b) scanf("%lld%lld",&a,&b)

#define scl3(a,b,c) scanf("%lld%lld%lld",&a,&b,&c)

#define l_b lower_bound

#define u_b upper_bound

#define min_2(a,b) a

#define min_3(a,b,c) min_2(min_2(a,b),c)

#define max_2(a,b) a>b?a:b

#define max_3(a,b,c) max_2(max_2(a,b),c)

#define ll long long

#define rint register int

#define mem0(x) memset(x, 0, sizeof(x))

#define mem1(x) memset(x, -1, sizeof(x))

#define lowbit(x) x&-x

/**inline int read()///神奇的读优

{

int x=0,f=1;char c=getchar();

while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}

while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}

return x*f;

}*/

///2147483647 -2147483648

///9223372036854775807 -9223372036854775808

//freopen("input.txt", "r", stdin);

const double PI=acos(-1.0);

const int inf = 0x3f3f3f3f;

const ll inff = 0x3f3f3f3f3f3f3f3f;

const int mod = 1e9+7;

const int maxn= 1e8+5;

//mapmp;

//setst;

//stack<>st;

//queue<>Q;

/***********************************************/

vectorV;

ll x[200+3],y[200+3];

ll solve(ll a,ll b,ll c,ll d,ll e,ll f)

{

return abs(a*d+b*e+c*f-a*f-b*c-d*e);

}

int main()

{

int T;

cin>>T;

while(T--)

{

V.clear();

int n,k;

sc2(n,k);

for(int i=1;i<=n;i++){

scanf("%lld%lld",&x[i],&y[i]);

}

for(int i=1;i<=n-2;i++)

{

for(int j=i+1;j<=n-1;j++){

for(int p=j+1;p<=n;p++){

ll ans=solve(x[i],y[i],x[j],y[j],x[p],y[p]);

if(ans) V.push_back(ans);

}

}

}

int nn=V.size();

nth_element(V.begin(),V.begin()+nn-k,V.end());

if(V[nn-k]%2)

printf("%lld.50\n",V[nn-k]/2);

else

printf("%lld.00\n",V[nn-k]/2);

}

return 0;

}发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167088.html原文链接:https://javaforall.cn

🎈 相关推荐

篮球世界杯
🏷️ 365bet正网开户

篮球世界杯

📅 07-15 👀 5611
爱达邮轮(上海)爱达魔都号玩乐/娱乐活动/设施介绍【携程邮轮】
🏷️ office365用不了怎么回事

爱达邮轮(上海)爱达魔都号玩乐/娱乐活动/设施介绍【携程邮轮】

📅 07-14 👀 2540
专业的价值到底有多大?哪个专业就业好?
🏷️ office365用不了怎么回事

专业的价值到底有多大?哪个专业就业好?

📅 07-13 👀 6223
羊肉汤去膻新法:草把组合让汤浓白鲜香!
🏷️ office365用不了怎么回事

羊肉汤去膻新法:草把组合让汤浓白鲜香!

📅 06-30 👀 7463
cf11月千变轮回全抽要多少钱 12抽全抽钥匙数量及抽奖顺序解析
饥荒腐烂物百科图鉴 饥荒联机版腐烂物的详细介绍与使用攻略
🏷️ office365用不了怎么回事

饥荒腐烂物百科图鉴 饥荒联机版腐烂物的详细介绍与使用攻略

📅 08-03 👀 2485