zoj 3720
为什么注释掉的地方是错的? 自己的代码好糟烂.....
直接枚举点 判是否在多边形内 加起来求概率 求面积的时候代码写搓了....
比不过别人两行的代码 而且到现在还找不到错.....
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#define eps 1e-8
#define _sign(x) ((x)>eps?1:((x)<-eps?2:0))
#define zero(x) (((x)>0?(x):-(x))<eps)
#define offset 500
using namespace std;
const int N = 100;
struct point
{
double x, y;
point(double i, double j)
{
x = i, y = j;
}
point() {}
} p[N]; double xmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
int inside(point q, int n, point *p)
{
int s[3] = {1, 1, 1};
for(int i = 0; i < n && s[1]|s[2]; i++)
s[_sign(xmult(p[(i+1)%n], q, p[i]))] = 0;
return s[1]|s[2];
}
int inside_polygon(point q,int n,point* p)
{
point q2;
int i=0,count;
while (i<n)
for (count=i=0,q2.x=rand()+offset,q2.y=rand()+offset; i<n; i++)
{
if (zero(xmult(q,p[i],p[(i+1)%n]))&&(p[i].x-q.x)*(p[(i+1)%n].x-q.x)<eps
&&(p[i].y-q.y)*(p[(i+1)%n].y-q.y)<eps)
return 1;
else if (zero(xmult(q,q2,p[i])))
break;
else if (xmult(q,p[i],q2)*xmult(q,p[(i+1)%n],q2)<-eps&&
xmult(p[i],q,p[(i+1)%n])*xmult(p[i],q2,p[(i+1)%n])<-eps)
count++;
}
return count&1;
}
int main(void)
{
double x0,y0,xn,yn;
int a,b,n;
while(scanf("%lf%lf%lf%lf",&x0,&y0,&xn,&yn) == 4)
{
int _x0 = ceil(x0), _y0 = ceil(y0), _xn = floor(xn), _yn = floor(yn);
// printf("%d %d %d %d",_x0, _y0, _xn, _yn);
scanf("%d%d%d",&n,&a,&b);
for(int i = 0; i < n; i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
}
double sum = 0;
for(int i = _x0; i <= _xn; i++)
for(int j = _y0; j <= _yn; j++)
{
if(inside_polygon(point(i, j), n, p))
{
double r=(min(i+0.5,xn)-max(i-0.5,x0))*(min(j+0.5,yn)-max(j-0.5,y0));
sum += r*(i*a+j*b);
// if(i > _x0 && i < _xn && j > _y0 && j < _yn)
// sum += (i*a+j*b);
// else if(i > _x0 && i < _xn && (j == _y0 || j == _yn))
// {
// if(j == _y0)
// sum += (i*a+j*b)*((double)((double)_y0-y0+0.5));
// else
// sum += (i*a+j*b)*((yn-(double)_yn+0.5));
// }
// else if((i == _x0 || i == _xn) && j > _y0 && j < _yn)
// {
// if(i == _x0)
// sum += (i*a+j*b)*(((double)_x0-x0+0.5));
// else
// sum += (i*a+j*b)*((xn-(double)_xn+0.5));
// }
// else
// {
// if(i == _x0 && j == _y0)
// sum += (i*a+j*b)*(((double)_x0-x0+0.5))*(((double)_y0-y0+0.5));
// else if(i == _x0 && j == _yn)
// sum += (i*a+j*b)*(((double)_x0-x0+0.5))*((yn-(double)_yn+0.5));
// else if(i == _xn && j == _y0)
// sum += (i*a+j*b)*((xn-(double)_xn+0.5))*(((double)_y0-y0+0.5));
// else
// sum += (i*a+j*b)*((xn-(double)_xn+0.5))*((yn-(double)_yn+0.5));
// }
}
}
printf("%.3lf\n",(double)sum/(xn-x0)/(yn-y0));
}
return 0;
}
zoj 3720的更多相关文章
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- ZOJ 3686 A Simple Tree Problem
A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a rooted tree, each no ...
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1392 The Hardest Problem Ever
放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...
- ZOJ Problem Set - 1049 I Think I Need a Houseboat
这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...
- ZOJ Problem Set - 1006 Do the Untwist
今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...
- ZOJ Problem Set - 1001 A + B Problem
ZOJ ACM题集,编译环境VC6.0 #include <stdio.h> int main() { int a,b; while(scanf("%d%d",& ...
- zoj 1788 Quad Trees
zoj 1788 先输入初始化MAP ,然后要根据MAP 建立一个四分树,自下而上建立,先建立完整的一棵树,然后根据四个相邻的格 值相同则进行合并,(这又是递归的伟大),逐次向上递归 四分树建立完后, ...
- ZOJ 1958. Friends
题目链接: ZOJ 1958. Friends 题目简介: (1)题目中的集合由 A-Z 的大写字母组成,例如 "{ABC}" 的字符串表示 A,B,C 组成的集合. (2)用运算 ...
随机推荐
- JAVA输入/输出系统中的其他流学习笔记
一.字节数组流 字节数组流类能够操作内存中的字节数组,它的数据是一个字节数组.字节数组流类本身适配器设计模式,它把字节数组类型转为流类型使得程序能够对字节数组进行读写操作. 1.ByteArrayIn ...
- iOS开发 中的代理实现
iOS开发 中的代理实现 关于今天为什么要发这篇文字的原因:今天在和同事聊天的时候他跟我说项目中给他的block有时候不太能看的懂,让我尽量用代理写,好吧心累了,那就先从写个代理demo,防止以后他看 ...
- 给label text 上色 && 给textfiled placeholder 上色
1.给label text 上色: NSInteger stringLength = ; stringLength = model.ToUserNickName.length; NSMutableAt ...
- (转)NoSQL系列:选择合适的数据库
内容目录: 为什么使用NoSQL数据库? 键值数据库 文档数据库 列族数据库 图数据库 附思维导图 参考 NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 阻抗失衡 关系模型和内存中的数 ...
- UGUI之在场景中设置、修改标签和按钮
UnityGUI使用一个特殊的OnGUI()函数,在该函数中加入实现UI的脚本. 它一共有两种类型的接口:GUI.xxx()和GUILayout.xxx(). 第一种需要自动手写填写处于屏幕上的位置. ...
- 'WinMain' : function cannot be overloaded
Create a MFC Application (UNICODE), paste following code in one of your cpp file. int APIENTRY WinMa ...
- HLG 1400 汽车比赛
题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1400 结构体排序+树状数 ...
- 《C++ Qt 设计模式》8|15拼图 小游戏的简单实现。拜托,别乱点!
第零章:介绍 看到这个游戏了,感觉蛮好玩的,实现了一下. 界面如下: 游戏玩法:在3×*3的矩阵中,每个按钮都可以点击,如果按钮四周有一个是空白,则点击此按钮则会移动到这个空白.按钮字母顺序变成“AB ...
- jQuery自己编写插件()
引言: 在项目中不同页面经常要用到已经写好的交互,比如弹窗,比如下拉菜单,比如选项卡,比如删除... 此时如果每次都把代码copy一份无疑是一件比较麻烦并且无趣的事情,而且个人认为有些low了,我们可 ...
- 两个list 求交集效率对比
__author__ = 'daitr' #--coding:utf-8-- import datetime #方法一: #a=[2,3,4,5] #b=[2,5,8] #tmp = [val for ...