zoukankan      html  css  js  c++  java
  • 「POJ

    BUPT 2017 summer training (16) #2 A

    题意

    有一个玩具盒,被n个隔板分开成左到u右n+1个区域,然后给每个玩具的坐标,求每个区域有几个玩具。

    题解

    依次用叉积判断玩具在每个隔板左边还是右边。

    知识

    (vec a=(x_1,y_1),vec b=(x_2,y_2))

    点乘:内积(数量积),(vec{a}cdotvec{b}=|a||b|cos heta=x_1cdot x_2+y_1cdot y_2)

    叉乘:外积(向量积),(|vec{c}|=|vec{a} imesvec{b}|=|a||b|sin heta=x_1cdot y_2-x_2cdot y_1)

    向量积的结果是一个向量,方向用“右手法则”判断(四指为a的方向,朝手心方向摆动到b的方向,大拇指就是c的方向)

    几何意义:

    点乘的几何意义是:是一条边向另一条边的投影乘以另一条边的长度

    叉乘的几何意义是:两个矢量围成的平行四边形的面积

    代码

    #include <cstdio>
    #define N 50001
    int n,m;
    int x1,y1,x2,y2,u[N],l[N];
    int ans[N];
    int xmul(int x1,int y1,int x2,int y2){
    	return (x1*y2)-(x2*y1);
    }
    int main(){
    	while(scanf("%d",&n),n){
    		scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
    		for(int i=0;i<n;++i)
    			scanf("%d%d",u+i,l+i),ans[i]=0;
    		ans[n]=0;
    		for(int i=0,j,x,y;i<m;++i){
    			scanf("%d%d",&x,&y);
    			for(j=0;j<n;++j)
    				if(xmul(x-l[j],y-y2,u[j]-l[j],y1-y2)<=0)
    					break;
    			++ans[j];
    		}
    		for(int i=0;i<=n;++i)
    			printf("%d: %d
    ",i,ans[i]);
    		puts("");
    	}
    }
    
  • 相关阅读:
    django基础篇
    oracle中的intersect和minus
    Mybatis中的DTD文件
    ibatis 大于 小于 等。。
    Mysql的DATE_FORMAT()日期格式转换
    mybatis中配置批量insert list
    java split 函数
    Hadoop全分布式模式安装
    Linux免密远程登陆
    Hadoop伪分布式搭建
  • 原文地址:https://www.cnblogs.com/flipped/p/7207560.html
Copyright © 2011-2022 走看看