Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
代码,鬼JAVA,慢死~~~~将近4S AC的In Reply To:贪心题。。附代码 Posted by:yzhw at 2009-03-15 01:47:26 Source Code Problem: 1066 User: yzhw Memory: 912K Time: 3641MS Language: Java Result: Accepted Source Code import java.io.*; import java.util.Arrays; class point { double x1,x2,y1,y2; } public class Main { static double M(double x1,double y1,double x2,double y2,double x0,double y0) { return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0); } static boolean cross(point u,point v) { if(Math.max(u.x1, u.x2)>=Math.min(v.x1,v.x2)&& Math.max(v.x1,v.x2)>=Math.min(u.x1, u.x2)&& Math.max(u.y1, u.y2)>=Math.min(v.y1,v.y2)&& Math.max(v.y1, v.y2)>=Math.min(u.y1, u.y2)&& (M(u.x1,u.y1,v.x1,v.y1,v.x2,v.y2)*M(u.x2,u.y2,v.x1,v.y1,v.x2,v.y2)<0)&& (M(v.x1,v.y1,u.x1,u.y1,u.x2,u.y2)*M(v.x2,v.y2,u.x1,u.y1,u.x2,u.y2)<0) ) return true; else return false; } static boolean equal(double a,double b) { if(Math.abs(a-b)<1e-7) return true; else return false; } public static void main(String[] args) throws IOException{ StreamTokenizer in=new StreamTokenizer(System.in); int num; double endx,endy; in.nextToken(); num=(int)in.nval; point data[]=new point[num+1]; int[] up=new int[101],down=new int[101],left=new int[101],right=new int[101]; int uc=1,dc=1,lc=1,rc=1; for(int i=1;i<=num;i++) { data[i]=new point(); in.nextToken(); data[i].x1=in.nval; in.nextToken(); data[i].y1=in.nval; in.nextToken(); data[i].x2=in.nval; in.nextToken(); data[i].y2=in.nval; if(equal(data[i].x1,0)) left[++lc]=(int)data[i].y1; if(equal(data[i].x2,0)) left[++lc]=(int)data[i].y2; if(equal(data[i].x1,100)) right[++rc]=(int)data[i].y1; if(equal(data[i].x2,100)) right[++rc]=(int)data[i].y2; if(equal(data[i].y1,0)) down[++dc]=(int)data[i].x1; if(equal(data[i].y2,0)) down[++dc]=(int)data[i].x2; if(equal(data[i].y1,100)) up[++uc]=(int)data[i].x1; if(equal(data[i].y2,100)) up[++uc]=(int)data[i].x2; } up[++uc]=100; down[++dc]=100; left[++lc]=100; right[++rc]=100; in.nextToken(); endx=in.nval; in.nextToken(); endy=in.nval; Arrays.sort(left,1,lc+1); Arrays.sort(right,1,rc+1); Arrays.sort(up,1,uc+1); Arrays.sort(down,1,dc+1); double[] cup=new double[uc],cdown=new double[dc],cleft=new double[lc],cright=new double[rc]; for(int i=1;i<uc;i++) cup[i]=(double)(up[i]+up[i+1])/2; for(int i=1;i<dc;i++) cdown[i]=(double)(down[i]+down[i+1])/2; for(int i=1;i<rc;i++) cright[i]=(double)(right[i]+right[i+1])/2; for(int i=1;i<lc;i++) cleft[i]=(double)(left[i]+left[i+1])/2; //---------------------------deal------------------------------------------------------ int res=9999999; point temp=new point(); temp.x2=endx; temp.y2=endy; for(int i=1;i<uc;i++) { temp.x1=cup[i]; temp.y1=100; int count=0; for(int j=1;j<=num;j++) if(cross(data[j],temp)) count++; if(count<res) res=count; } for(int i=1;i<dc;i++) { temp.x1=cdown[i]; temp.y1=0; int count=0; for(int j=1;j<=num;j++) if(cross(data[j],temp)) count++; if(count<res) res=count; } for(int i=1;i<lc;i++) { temp.x1=0; temp.y1=cleft[i]; int count=0; for(int j=1;j<=num;j++) if(cross(data[j],temp)) count++; if(count<res) res=count; } for(int i=1;i<rc;i++) { temp.x1=100; temp.y1=cright[i]; int count=0; for(int j=1;j<=num;j++) if(cross(data[j],temp)) count++; if(count<res) res=count; } res++; System.out.println("Number of doors = "+res); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator