POJ 1031--Fence

poj3586AC代码 poj3586,推导题,可以推导出一个贪心的结论,具体看代码。 立即下载

题意

题目意思是,在一个平面上,有一个由若干个栅栏围成的多边形。同时还有一个灯,灯可能在多边形里面或者外面(反正不在栅栏上),已知在空间中任何一点受到的光强为I=k/r(r为灯到这一点的连线在平面上投影的长度,其实就是说不考虑灯和这一点的高度),灯在栅栏上某一处宽为d的光强总和为I*|cosα|*d*h(α为灯到栅栏的垂线与灯到这一处的连线的夹角在平面上的投影),求灯在栅栏上的光强总和。

分析

一开始,我看错题了,以为距离是和夹角都是在空间里的,跑去求二重积分,其实都是在平面上的投影,这样只是一重积分。我们从上往下俯视,如下图:
这里写图片描述
那么在宽为d的栅栏上的光强为这里写图片描述,那么整个栅栏上的光强就是对d的积分这里写图片描述,再将d用α表示,得到:
这里写图片描述
显然本题的目标已经变成求灯到栅栏两端构成的夹角了。

由于光不能透过栅栏,所以对于后面的栅栏不必考虑。我们从灯连接一条线到栅栏上任意一点,让此点沿栅栏走一周,此线扫过的角度即是灯光能照射到栅栏上的范围。我们约定这一条线顺时针走动时,角度值正增长,角度值负增长。因此,如果灯在栅栏里面,这条线扫过的角度一定是360度。如果是在外面,最后扫过的角度会变为0,这时候设定两个值记录角度正向最大值和负向最小值,两者的差即为此线扫过的角度。

PS: 角度不会大于360度,所以当角度到达360度时,可以提前退出。
代码如下:
Memory: 248K Time: 32MS Length: 43LINES

#include <cmath>
#include <iomanip>
#include <iostream>
#define min(x,y) (((x) > (y)) ? (y) : (x))
#define max(x,y) (((x) < (y)) ? (y) : (x))
using namespace std;

const double pi = 3.1415926535898;
int main()
{
    double k, h;
    int count;
    double array[101][2] = { 0 };
    while (cin >> k >> h >> count)
    {
        for (int i = 0; i < count; ++i)
            cin >> array[i][0] >> array[i][1];
        array[count][0] = array[0][0];
        array[count][1] = array[0][1];
        double a, b;
        a = atan2(array[0][1], array[0][0]);
        double key = 1.0;
        double sum = 0.0;
        double maxsum = 0.0;
        double minsum = 0.0;
        int i = 1;
        for (; i < count + 1; ++i, a = b)
        {
            b = atan2(array[i][1], array[i][0]);
            double ang = abs(a - b);
            ang = ang > pi ? 2 * pi - ang : ang;
            if (a > b)  key = (a - b < pi) ? 1.0 : -1.0;
            else if (a < b) key = (b - a > pi) ? 1.0 : -1.0;
            else key = 0.0;
            sum += key * ang;
            minsum = min(minsum, sum);
            maxsum = max(sum, maxsum);
            if (maxsum >= 2 * pi || minsum <= -2 * pi || (maxsum - minsum) >= 2 * pi) break;
        }
        cout << setprecision(2) << setiosflags(ios::fixed) << h * k * (i > count ? maxsum - minsum : 2 * pi) << endl;
    }
    return 0;
}
北京大学poj题目解题代码 此压缩包包含北京大学POJ题目的绝大部分解题代码,一道题目有不同语言的编程,但主要是C++语言,仅供大家学习之用。 立即下载

相关推荐

北大ACM题库及解答之四

解题报告:Fence 题目来源:POJ 1031 解法或类型: 计算几何 作者:杨清玄 Fence Time Limit:1S Memory Limit:1000K Total Submit:103 Accepted:26 Description There is an area bounded by a fence on some flat field. The fence has the height h and in the plane projection it has a form of a closed polygonal line (without self-intersections), which is specified by Cartesian coordinates (Xi, Yi) of its N vertices. At the point with coordinates (0, 0) a lamp stands on the field. The lamp may be located either outside or inside the fence, but not on its side as it is shown in the following sample pictures (parts shown in a thin line are not illuminated by the lamp): The fence is perfectly black, i.e. it is neither reflecting, nor diffusing, nor letting the light through. Research and experiments showed that the following law expresses the intensity of light falling on an arbitrary illuminated point of this fence: I0=k/r where k is a known constant value not depending on the point in question, r is the distance between this point and the lamp in the plane projection. The illumination of an infinitesimal narrow vertical board with the width dl and the height h is dI=I0*|cosα|*dl*h where I0 is the intensity of light on that board of the fence, α is the angle in the plane projection between the normal to the side of the fence at this point and the direction to the lamp. You are to write a program that will find the total illumination of the fence that is defined as the sum of illuminations of all its illuminated boards. Input The first line of the input file contains the numbers k, h and N, separated by spaces. k and h are real constants. N (3 <= N <= 100) is the number of vertices of the fence. Then N lines follow, every line contains two real numbers Xi and Yi, separated by a space. Output Write to the output file the total illumination of the fence rounded to the second digit after the decimal point. Sample Input 0.5 1.7 3 1.0 3.0 2.0 -1.0 -4.0 -1.0 Sample Output 5.34 Source Northeastern Europe 1998 解题思路: 本题是一道计算几何的题目。首先,由于题目可以得到dI=I0*|cosα|*dl*h 也就是说一条边的总照度为 = = =a*h*k 其中下,X1,X2为一条边的坐右端点,a为这条边对原点所张的角度 所以实际上本题是要求整个FENCE区域对原点所张开的总角度, 定义FENCE为一有向回路 那么每条边都是有向的。。如果按照边的方向对原点所张开的角度为顺时针。那么定义为正。逆时针为负。并且每输入一条边就把本边对原点张开的角度计算进去加到一个数里去 那么对于包含原点的区域。这个数应该为正负2 ; 对于不包含原点的区域,这个数在按边过程中的最大值-最小值就是这个区域对原点所张开的角度。 还有一种情况,那就是区域不包含原点,但是总共张开的角度大于2 ,那么只要计算为2 即可因为原点对任何区域最多只能张开2 。 数据结构: 用一个POINT数组来储存点的位置 时空分析: 如果有N个点 那么空间复杂度为O(N) 时间复杂度为O(N) 源程序: fence.cpp

poj (1031) 计算几何

题目描述 平面上有一块栅栏围成的区域。 栅栏的高度为h,且在平面上的投影是一个封闭的多边形(不存在多边形的边交叉的情况 ),它的N个顶点可以由笛卡尔坐标系中的坐标(Xi,Yi)表示。 在原点O(0,0)处有一个台灯。台灯可能在栅栏内或栅栏外,但不会刚好在栅栏的边上。 如下图所示(细线表示没有被台灯照亮的边): 栅栏是完全黑的,即,它不会反射光线,散射光线,或让光线通过。 研究和实验发现,能被光线

weiwei2012start的专栏 1253

POJ上一些已经AC的代码

acm.pku.edu.cn/OnlineJudge上一些已经通过的代码

poj——1031——fence

address:http://poj.org/problem?id=1031 My thought:说实话 看见英语题的时候 状态不咋好,后来勉强把题目看完。 不是太懂,想了好久,题目根本通不了,这英语太菜让我无语,我去度了一下,有的解法是用积分,有的说这是一道很水的题目。 我大概都看了看,有一些代码 提示错误,下面这个代码是可以用的。   题目中有一部分不是太懂,如果哪位朋友看懂了,可以留

Kamy Shi 1366

Tera Term介绍和使用指南

Tera Term 是一个用于 Windows 操作系统的免费终端模拟器和串口通信软件。它主要用于在计算机和其他设备之间建立串口通信连接,例如通过串行线缆连接到设备如路由器、开发板或嵌入式系统。Tera Term 支持多种通信协议和功能,包括 Telnet、SSH 和串口通信。提供了一个终端窗口,模拟了常见的终端类型,如VT100。支持通过串口与设备进行通信,可用于与嵌入式系统、微控制器等设备进行连接。提供 Telnet 和 SSH 功能,可用于通过网络连接到远程主机。

weixin_49423593的博客 1万+

CMN-700组件全解析:从XP路由器到HN-F主节点的实战配置指南

本文深入解析Arm CMN-700片上网络IP的核心组件与实战配置。重点剖析了XP网格路由器的拓扑规划与CHI通道管理,以及HN-F全一致性主节点在维护缓存一致性、管理SLC和地址映射中的关键作用。通过一个12×12网格的配置案例,为硬件工程师提供了从组件布局、地址映射到性能调优的系统级设计指南。

weixin_29313423的博客 282

poj 1031 多边形对点(向周围发射光线)的覆盖

Fence Time Limit:1000MS Memory Limit:10000K Total Submissions:3018 Accepted:1010 Description There is an area bounded by a fence on some flat field. The fence has t...

weixin_30340353的博客 212

西门子smart能搜到cpu但连接当前IP地址失败

将ip地址改到同一网段 本机为192.168.1.119就是192.168.1.1网段,但plc在192.168.0.1网段,所以显示ip连接失败,改为同一网段192.168.1.xxx即可(为避免ip冲突尽量改到200往后最大255)如果显示这一步,那么你的物理连接是没有问题的,应当是plc和电脑并不在同一网段导致的问题。输入ipconfig 查看本机网段与plc是否为同一网段。此电脑就不在同一网段所有造成通讯失败,接下来解决这个问题。win+r打开运行,打开cmd。再次尝试,如果还是报错,那么。

weixin_62678581的博客 9863

poj 1031

题目 Fence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3669   Accepted: 1267 Description There is an area bounded by a fence on some flat field. T

PaladinDu的专栏 498

大厂嵌入式面试常考八股文及算法

1.指向已被释放或无效的内存地址的指针是野指针。互斥锁是一种用于线程同步的机制,用于确保同一时间只有一个线程访问共享资源。多态是面向对象编程中的一种特性,它允许以一种统一的方式处理不同类型的对象,通过相同的接口可以表现出不同的行为。大小端(Endian)指的是在计算机存储和处理多字节数据时,字节的存储顺序。大端序(Big Endian):高位字节存储在低地址,低位字节存储在高地址。类似于将数字的高位放在左边,低位放在右边的表示方式。例如整数值0x12345678在内存中按照大端序排列为。

谢谢大家的关注 6155

华为2022数字芯片笔试题

单选 1、ASIC开发流程中,如下环节的先后顺序是? A. RTL-> Synthesis->P&R B. Synthesis->P&R->RTL C. Synthesis->RTL->P&R D.RTL->P&R->Synthesis 2、o10换算成十进制是多少? A. 8 B.16 C.10 D.2 3、reg [7:0] mem [1:256];initial $readmemh("me..

weixin_44072819的博客 1万+

POJ1031 Fence

题目来源:http://poj.org/problem?id=1031 题目大意:   有一个光源位于(0,0)处,一个多边形的围墙。围墙是“全黑”的,不透光也不反射光。距光源r处的光强度为I0=k/r,k为常数。   一块无穷窄高为h的墙上围墙受到的照度为dI=I0*|cosα|*dl*h,其中I0为该点光强,α为法线与该点到光源连线的夹角。 求总照度。(dI之和) 输入:第一行三...

weixin_30483013的博客 127

如何实现MCGS与S7-200SMART PLC以太网多台通信控制?

第九步:(设备工具箱—设备管理—鼠标依次点击通用TCP/IP父设备—西门子_ Smart200到设备窗口里面去)数据类型:第0位(指PLC地址变量小数点后面的位数,例如我地址是M0.0,那么在数据类型应填写通道的第00位)第十步:(鼠标双击打开通用TCPIP父设备0--[通用TCP/IP父设备]进入通信配置)通道地址:0(指小数点前面起始字节的地址,例如我地址是M0.0,那么应在通道地填写0)。第七步:(选择通用TCP/IP父设备,点击新增,右侧选定设备就会自动添加进去。

u010670857的博客 6715

POJ 1031 Fence

题目链接:http://poj.org/problem?id=1031 题目大意: 略 题目解析: 求原点能够照射多边形的最大角度,该角度是弧度制下的夹角 AC代码: #include<iostream> #include<algorithm> #include<math.h> #include<stdio.h> using names...

Helloirbd的博客 280

50、压电微泵与技术设备驱动的研究分析

本文研究了压电微泵在弹性微通道中的流体流动特性及技术设备驱动的振动行为。通过建立轴对称流固耦合模型,利用FreeFem++进行数值模拟,分析了不同数量压电致动器和频率对微泵流量的影响,发现多个致动器按特定时序压缩可产生净正向流量,并提出了稳态流量的近似解析公式。同时,针对技术设备驱动系统,探讨了周期性负载引起的强迫振动特性,明确了共振条件及影响因素,并比较了主动、被动和优化设计等振动控制策略。最后展望了实验验证、多物理场耦合与智能控制等未来研究方向,为相关设备的优化设计与高效运行提供了理论支持。

convnet3designer的博客 148

【部署】Kimi 接入OpenClaw完整步骤及关键注意事项

本文详细介绍了如何将Kimi AI接入OpenClaw系统的完整步骤。首先需确保环境满足OpenClaw版本要求和系统支持,然后通过配置向导完成本地网关设置和Kimi模型接入,包括API密钥配置。文章提供了详细的命令操作和界面截图指导,并重点说明了安全警告处理、服务状态检查、API密钥有效性验证等关键注意事项。最后还展示了Kimi流量消耗明细和问题排查方法,帮助用户顺利完成接入并解决常见问题。整个流程清晰明了,涵盖了从环境准备到最终验证的全部环节。

海兰 7177

poj1031 fence

给一个多边形,求多边形和源点的张角和,这个。。。明明是求积分诶。。。想不通啊 下面这个是ac代码,抄的,还是没看懂。。。 #include #include #define M_PI 3.14159265358979323846 double

alven‘s bookcase 899

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

POJ 1031 Fence

题目大意:在二维坐标系中,由n个点构成的封闭图形,对于图形上某条直线微元dl,满足关系di=I0*|cosα|*dl*h,I0=k/r;其中k和h为一个定值,r为原点到该直线微元的距离,α为两条直线的夹角,两条直线分别为原点到直线微元所在直线的垂线,原点到直线微元的连线。最后求出

899

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

POJ 1031 Fence 笔记

篱笆旁边有盏灯。篱笆的某点的亮度I0=k/r,k是常数,r是灯到篱笆平面图中该点的距离。篱笆中某点的光照是dI=I0*|cosα|*dl*h,h是篱笆的高度,dl是无穷小的宽度,α是点所在边的法线与x轴的夹角。求篱笆的光照强度。

woniupengpeng的专栏 892

【计算几何】poj1031 fence

简直吐血啊。。。。本来就是求个角度,自作聪明的用点积和叉积来求,后来发现都错掉了。。。。 #include #include #include #include using namespace std; const double PI=3.1415926535; struct Point{ double x,y; }; Point point[205]; double beta(int k)

BananaTree 1258

【计算几何】-poj1031-Fence

题意 有一个灯,有一些栏杆,定义单位光照强度的式子与距离成反比,然后一块区域的光照总和就等于单位光照强度的积分。 题解 积分后发现,光照总和与栏杆的形状无关,只与与由灯引出的射线形成的夹角有关,故求夹角就行 求夹角的时候有一个小trick,我们可以用第一个点与灯的连线当做标志,逆时针走就加,顺时针就减,这样可以减少一些特殊情况的判断 代码 #include <iostream> #in...

wang_viscaria的博客 210

poj1031-Fence-acm解题报告

原题描述:          Fence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3658   Accepted: 1261 Description There is an area bounded by a fence on some flat

verylonglongago的博客 592

poj 1031 Fence 计算几何

物理题+数学题+信息学题 1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 #define MAXN 101 5 #define PI 3.1415926 6 struct point 7 { 8 double x,y; 9 };10 point a[MAXN];11 dou...

weixin_30856725的博客 116

poj-1031-fence(不是我写的,我只是想看着方便)

题目大意:   有一个光源位于(0,0)处,一个多边形的围墙。围墙是“全黑”的,不透光也不反射光。距光源r处的光强度为I0=k/r,k为常数。   一块无穷窄高为h的墙上围墙受到的照度为dI=I0*|cosα|*dl*h,其中I0为该点光强,α为法线与该点到光源连线的夹角。 求总照度。(dI之和) 输入:第一行三个数,第一个数为给定的常数k,第二个数位围墙高h,第三个数为围墙顶点数。接...

weixin_30666943的博客 73

poj1031---计算几何

//由题目给出的公式,积分 //其实我也是看网上的结论这题 #include #include #include #include #include #define dist(a,b) sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)) #define cross(a,b,c) (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x

carter91620 1150

poj1031(原点对多边形的张角)

#include #include #include #include #include #include #include #define ll long long #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #define PI acos(-1.0) using namespace std; struct node { doubl

__water 573
上一篇: POJ 1029--False coin
下一篇: POJ 1032--Parliament
Hering_Linux
博客等级 码龄12年 0粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值