POJ 2318 TOYS
来源:互联网 发布:js执行按钮点击事件 编辑:程序博客网 时间:2024/04/30 11:54
题意就是把一个矩形分成N+1个块,往里面扔M个玩具,问每个块里有多少玩具。
思路:求一下每条线的K和B。K不存在特殊标记一下,在K>0的情况下k*xx+b<yy表示在直线的左侧,同理在k<0的情况下k*xx+b>yy在直线的左侧。
#include"iostream"#include"cmath"#include"cstring"#include"cstdlib"using namespace std;#define M 5555int main(){int n,m;double x1,x2,y1,y2;while(scanf("%d",&n),n!=0){scanf("%d",&m);scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);int i,j;double a[M],b[M];double k[M],bb[M];int c[M],f;int ans[M];memset(ans,0,sizeof(ans));memset(c,0,sizeof(c));memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(k,0,sizeof(k));memset(bb,0,sizeof(bb));for(i=0;i<n;i++) scanf("%lf %lf",&a[i],&b[i]);for(i=0;i<n;i++){if(fabs(a[i]-b[i])>1e-8){k[i]=(y1-y2)/(a[i]-b[i]);bb[i]=y2-k[i]*b[i];}else{c[i]=-1;bb[i]=a[i];}}for(i=0;i<m;i++){double xx,yy;scanf("%lf%lf",&xx,&yy);f=0;for(j=0;j<n;j++){if((c[j]==-1&&xx<bb[j])||(k[j]>0&&xx*k[j]+bb[j]<yy)||(k[j]<0&&xx*k[j]+bb[j]>yy)){ans[j]++;f=1;break;}}if(f==0)ans[(int)n]++;}for(i=0;i<=n;i++)printf("%d: %d\n",i,ans[i]);printf("\n");}return 0;}
0 0
- POJ 2318 TOYS
- poj 2318 TOYS
- poj 2318 TOYS
- poj 2318 TOYS
- POJ 2318 TOYS
- poj 2318 TOYS
- POJ 2318 TOYS
- POJ 2318 TOYS
- POJ 2318 TOYS
- poj 2318 TOYS
- poj - 2318 - TOYS
- poj 2318 TOYS
- POJ 2318 TOYS
- poj 2318 TOYS
- poj 2318 TOYS
- POJ 2318 TOYS
- poj 2318 Toys
- POJ 2318 TOYS
- UI - TargetAction模式
- Gamma的完全理解
- android oom 全解析
- 深入理解Android之设备加密Device Encryption
- 顺时针打印数组
- POJ 2318 TOYS
- gearman消息发送示例
- ZOJ.2481 Unique Ascending Array【子集】 2015/09/24
- 如何查询安卓手机型号以及如何修改型号跟品牌
- 【二维码】:二维码的科普
- 设计模式 - 建造者模式(Builder)
- Codeigniter控制器支持多级目录
- nodejs如何请求路由,http和url模块
- 企业证书打包应用托管到第三方,iPhone4s安装失败。