当前位置: 代码迷 >> 综合 >> FZU 2148
  详细解决方案

FZU 2148

热度:19   发布时间:2023-11-17 11:13:50.0
这道题目不算太难

题意:给你n个点问你能组成多少凸4边形,直接暴力即可

判断是凸4边行的方法,排除法,如果一个顶点个与其他三个顶点组成的三角形的面积和应等于那三个顶点组成三角形的面积

由三个顶点求三角形面积的公式↓↓↓↓

A(x1,y1) B(x2,y2) C(x3,y3)
| x1 y1 1|
| x2 y2 1| * 0.5
| x3 y3 1|
//不知道咋推得,自己还是太菜 ps:听说初中过。。。。
其他也没啥,上代码,
JAVA

package fZU_2148_Moon_Game;import java.util.Scanner;public class Main {static int x[]=new int[1000];static int y[]=new int[1000];public static void main(String args[]){Scanner cin=new Scanner(System.in);int t;t=cin.nextInt();int tt=0;while(t>0){t--;tt++;int n;n=cin.nextInt();for(int i=0;i<n;i++){x[i]=cin.nextInt();y[i]=cin.nextInt();//System.out.println("666");}int ans=0;int i,j,k,l;for(i=0;i<n;i++){for( j=i+1;j<n;j++){for(k=j+1;k<n;k++){for( l=k+1;l<n;l++){   //System.out.println(i+" "+j+" "+k+" "+l);if(ok(i,j,k,l)*ok(j,i,k,l)*ok(k,i,j,l)*ok(l,i,j,k)>0)ans++;}}}}System.out.println("Case "+tt+": "+ans);}}public static int ok(int a,int b,int c,int d){       if(js(a,b,c)+js(a,c,d)+js(a,b,d)==js(b,c,d)) return 0;else return 1;}public static double js(int a,int b,int c){double aa = 0;aa = Math.abs(x[a]*y[b]+x[b]*y[c]+x[c]*y[a]-x[a]*y[c]-x[b]*y[a]-x[c]*y[b]);// System.out.println(a+" "+" "+b+" "+c+" "+aa*0.5);return aa*0.5;}
}

加油!!!