为什么注释掉的地方是错的?  自己的代码好糟烂.....

直接枚举点  判是否在多边形内  加起来求概率    求面积的时候代码写搓了....     比不过别人两行的代码    而且到现在还找不到错.....

  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. #include <cstdio>
  5. #include <cmath>
  6. #include <cstdlib>
  7. #define eps 1e-8
  8. #define _sign(x) ((x)>eps?1:((x)<-eps?2:0))
  9. #define zero(x) (((x)>0?(x):-(x))<eps)
  10. #define offset 500
  11. using namespace std;
  12. const int N = 100;
  13. struct point
  14. {
  15. double x, y;
  16. point(double i, double j)
  17. {
  18. x = i, y = j;
  19. }
  20. point() {}
  21. } p[N];
  22.  
  23. double xmult(point p1,point p2,point p0)
  24. {
  25. return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
  26. }
  27. int inside(point q, int n, point *p)
  28. {
  29. int s[3] = {1, 1, 1};
  30. for(int i = 0; i < n && s[1]|s[2]; i++)
  31. s[_sign(xmult(p[(i+1)%n], q, p[i]))] = 0;
  32. return s[1]|s[2];
  33. }
  34. int inside_polygon(point q,int n,point* p)
  35. {
  36. point q2;
  37. int i=0,count;
  38. while (i<n)
  39. for (count=i=0,q2.x=rand()+offset,q2.y=rand()+offset; i<n; i++)
  40. {
  41. if (zero(xmult(q,p[i],p[(i+1)%n]))&&(p[i].x-q.x)*(p[(i+1)%n].x-q.x)<eps
  42. &&(p[i].y-q.y)*(p[(i+1)%n].y-q.y)<eps)
  43. return 1;
  44. else if (zero(xmult(q,q2,p[i])))
  45. break;
  46. else if (xmult(q,p[i],q2)*xmult(q,p[(i+1)%n],q2)<-eps&&
  47. xmult(p[i],q,p[(i+1)%n])*xmult(p[i],q2,p[(i+1)%n])<-eps)
  48. count++;
  49. }
  50. return count&1;
  51. }
  52. int main(void)
  53. {
  54. double x0,y0,xn,yn;
  55. int a,b,n;
  56. while(scanf("%lf%lf%lf%lf",&x0,&y0,&xn,&yn) == 4)
  57. {
  58. int _x0 = ceil(x0), _y0 = ceil(y0), _xn = floor(xn), _yn = floor(yn);
  59. // printf("%d %d %d %d",_x0, _y0, _xn, _yn);
  60. scanf("%d%d%d",&n,&a,&b);
  61. for(int i = 0; i < n; i++)
  62. {
  63. scanf("%lf%lf",&p[i].x,&p[i].y);
  64. }
  65. double sum = 0;
  66. for(int i = _x0; i <= _xn; i++)
  67. for(int j = _y0; j <= _yn; j++)
  68. {
  69. if(inside_polygon(point(i, j), n, p))
  70. {
  71. double r=(min(i+0.5,xn)-max(i-0.5,x0))*(min(j+0.5,yn)-max(j-0.5,y0));
  72. sum += r*(i*a+j*b);
  73. // if(i > _x0 && i < _xn && j > _y0 && j < _yn)
  74. // sum += (i*a+j*b);
  75. // else if(i > _x0 && i < _xn && (j == _y0 || j == _yn))
  76. // {
  77. // if(j == _y0)
  78. // sum += (i*a+j*b)*((double)((double)_y0-y0+0.5));
  79. // else
  80. // sum += (i*a+j*b)*((yn-(double)_yn+0.5));
  81. // }
  82. // else if((i == _x0 || i == _xn) && j > _y0 && j < _yn)
  83. // {
  84. // if(i == _x0)
  85. // sum += (i*a+j*b)*(((double)_x0-x0+0.5));
  86. // else
  87. // sum += (i*a+j*b)*((xn-(double)_xn+0.5));
  88. // }
  89. // else
  90. // {
  91. // if(i == _x0 && j == _y0)
  92. // sum += (i*a+j*b)*(((double)_x0-x0+0.5))*(((double)_y0-y0+0.5));
  93. // else if(i == _x0 && j == _yn)
  94. // sum += (i*a+j*b)*(((double)_x0-x0+0.5))*((yn-(double)_yn+0.5));
  95. // else if(i == _xn && j == _y0)
  96. // sum += (i*a+j*b)*((xn-(double)_xn+0.5))*(((double)_y0-y0+0.5));
  97. // else
  98. // sum += (i*a+j*b)*((xn-(double)_xn+0.5))*((yn-(double)_yn+0.5));
  99. // }
  100. }
  101. }
  102. printf("%.3lf\n",(double)sum/(xn-x0)/(yn-y0));
  103. }
  104. return 0;
  105. }

zoj 3720的更多相关文章

  1. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  2. ZOJ 3686 A Simple Tree Problem

    A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a rooted tree, each no ...

  3. ZOJ Problem Set - 1394 Polar Explorer

    这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...

  4. ZOJ Problem Set - 1392 The Hardest Problem Ever

    放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...

  5. ZOJ Problem Set - 1049 I Think I Need a Houseboat

    这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...

  6. ZOJ Problem Set - 1006 Do the Untwist

    今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...

  7. ZOJ Problem Set - 1001 A + B Problem

    ZOJ ACM题集,编译环境VC6.0 #include <stdio.h> int main() { int a,b; while(scanf("%d%d",& ...

  8. zoj 1788 Quad Trees

    zoj 1788 先输入初始化MAP ,然后要根据MAP 建立一个四分树,自下而上建立,先建立完整的一棵树,然后根据四个相邻的格 值相同则进行合并,(这又是递归的伟大),逐次向上递归 四分树建立完后, ...

  9. ZOJ 1958. Friends

    题目链接: ZOJ 1958. Friends 题目简介: (1)题目中的集合由 A-Z 的大写字母组成,例如 "{ABC}" 的字符串表示 A,B,C 组成的集合. (2)用运算 ...

随机推荐

  1. FindControl 无法找到控件问题解决方案

    若用 string cdept =((HtmlInputText)FindControl("dept0" + i.ToString())).Value; 提示结果为空值,即无法找到 ...

  2. 关于ios对rtsp格式的流媒体支持的一些官方说明

    ios明确不支持rtsp格式的流媒体,基于rtsp/rtp对通用性和防炎墙以及需要开新端口等额外影响稳定性和通用性的原因. 而对http流的视频支持是最好的.虽然有第三方的方式配合ffmpeg库,实现 ...

  3. C# WCF学习笔记(二)终结点地址与WCF寻址(Endpoint Address and WCF Addressing) WCF中的传输协议

    URI的全称是 Uniform Rosource Identifire(统一资源标识),它唯一标识一个确定的网绐资源,同时也表示资源所处的位置及访问的方式(资源访问所用的网络协议). 对于Endpoi ...

  4. ansible安装(批量执行命令

    rpm安装 下载epl源 :  Download the latest epel-release rpm from:http://dl.fedoraproject.org/pub/epel/6/x86 ...

  5. Agile.Net 组件式开发平台 - 组件开发示例

    所谓组件式开发平台,它所有的功能模块都是以组件的形式扩展的,下面我来演示一个简单的组件开发例程. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina. ...

  6. Entity Framework 6.1-Model First

    原文:Entity Framework 6.1-Model First Model First-顾名思义,就是先创建EF数据模型,通过数据模型生成数据库的EF创建方式. 步骤. 1.新建一个DAL的文 ...

  7. 使用 EF Power Tool Code Frist 生成 Mysql 实体

    原文:使用 EF Power Tool Code Frist 生成 Mysql 实体 1,在要生成的项目上右键   2,   3,   4,   5,  生成后的效果     已知问题: 1,在Mys ...

  8. PHP学习笔记 - 入门篇(5)

    PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...

  9. 相似度到大数据查找之Mysql 文章匹配的一些思路与提高查询速度

    文章相关度匹配的一些思路---"压缩"预料库,即提取用特征词或词频,量化后以“列向量”形式保存到数据库:按前N组词拼为向量组供查询使用,即组合为1到N字的组合,量化后以“行向量”形 ...

  10. C 再识数组指针 指针数组的概念

    参考出处: http://www.cnblogs.com/mq0036/p/3382732.html http://www.cnblogs.com/hongcha717/archive/2010/10 ...