示例#1
0
文件: sgu_110.cpp 项目: TRYang/acm
int reflect(){
	int i,j,k=-1;
	double L,af1,af2;
	double L1,L2,L3,D,pl,tL,L4;
	for (i=0;i<n;i++)
		if (dot(s,s+st,a[i])>eps){
			L1=Dis(s,a[i]);
			L2=Dis(s+st,a[i]);
			L3=Dis(s,s+st);
			af1=acos((L1*L1+L3*L3-L2*L2)/2/L1/L3-eps);
			D=L1*sin(af1);
			if (D<r[i]-1e-8){
				pl=L1*L1-D*D;
				if (k==-1 || pl<L){
					k=i;
					L=pl;
				}
			}
		}
	if (k==-1) return 0;
	if (m==10) printf("etc.\n");else printf("%d ",k+1);
	L1=Dis(s,a[k]);
	L2=Dis(s+st,a[k]);
	L3=Dis(s,s+st);
	af1=acos((L1*L1+L3*L3-L2*L2)/2/L1/L3-eps);
	D=L1*sin(af1);
	pl=sqrt(L1*L1-D*D+eps);
	tL=sqrt(r[k]*r[k]-D*D+eps);
	pl-=tL;
	node ts,tst,v1,v2,v3;
	ts=s+mul(st,pl/L3);
	if (fabs(D)<eps){
		s=ts;
		st=mul(st,-1);
		return 1;
	}
//	printf("%.5lf %.5lf %.5lf\n",ts.x,ts.y,ts.z);
	L4=L1*((L1*L1+r[k]*r[k]-pl*pl)/2/L1/r[k]);
	v1=ts-a[k];
	v2=mul(v1,L4/r[k]);
	v3=a[k]+v2;
	v1=v3-s;
	v2=v1+v1;
	tst=(s+v2)-ts;
	s=ts;
	st=tst;
	//printf("%.5lf %.5lf %.5lf\n",st.x,st.y,st.z);
	return 1;
}
示例#2
0
文件: 11785.cpp 项目: dk00/old-stuff
main(){
  int i,j,k,n,m,dim,hyper;
  while (scanf("%d %d",&n,&m)==2 && n+m){
    hyper = 1;
    for (i = n,dim = 0;i > 1;i >>= 1,++dim)
      if (i>1 && i%2 != 0)
        hyper = 0;
    if (m*2 != n*dim) hyper = 0;
    for (i = 0;i < n;++i)
      deg[i] = 0;
    while (m--) {
      scanf("%d %d",&j,&k);
      if (Dis(j,k)!=1)
        hyper = 0;
      if (j < 0 || j >= n) hyper = 0;
      else ++deg[j];
      if (k < 0 || k >= n) hyper = 0;
      else ++deg[k];
    }
    for (i = 0;i < n;++i)
      if (deg[i] != dim) hyper = 0;
    puts(hyper?"YES":"NO");
  }
}