当前位置: 首页 > 后端技术 > Python

AtCoder语境ABC112C金字塔(金字塔)

时间:2023-03-26 00:09:03 Python

运行时限:2sec内存限制:1024MB原标题链接AtCoder语境ABC112C金字塔(金字塔)标题在古代夜郎国,夜郎国的国王想彰显自己的权威,决定建造金字塔。金字塔位于平面笛卡尔坐标系中。金字塔的中心坐标为(Cx,Cy),高度为H。对于金字塔的其他坐标(X,Y),坐标X,Y点的金字塔高度满足以下条件max(H-|Cx-X|-|Cy-Y|,0)ExplorerStark接到任务,他需要探测金字塔中心点的高度和坐标。这是斯塔克现在掌握的信息。中心点的坐标Cx、Cy在1到100之间(包括1到100之间的整数)。除了上述信息外,还有N条信息。N条信息中的第i条信息表示第i个点的坐标(xi,yi)和该点在金字塔上的高度hi。通过以上信息,可以找到金字塔的中心点和高度,要求输入这些值。前提1<=N<=100N是一个整数0<=xi,yi<=1000<=hi<=1000000000N个点坐标(x1,y1),(x1,y2),(x3,y3)....(xN,YN)各坐标点不重合。根据以上条件,可以找到一个满足金字塔中心点要求的点。输入是根据以下条件从命令行输入:x1y1h1x2y2h2x3y3h3...xNyNhNoutput输出具体的中心坐标Cx、Cy及其高度Ch,使用空格间隔例1输入4235215125325并输出226以上,中心点坐标为(2,2),中心点高度为6,满足条件。示例2输入2001001198,输出为00100或更多。中心点坐标为(0,0),中心点高度为100,满足条件。注意圆心坐标Cx,Cy为0到100之间的中间数例2输入39911911001192990192输出1000193以上,圆心点坐标为(100,0),高度为中心点为193,满足条件。0.金字塔的中心点是最高点,也就是说金字塔高度的变量H最大,比所有的ch都大。当然,如果给定的坐标点中有一个点(ci,cy)为中心,那么这个点的cy比其他点的cy大1。首先,有一个直角坐标系,有很多点在上面。以例1为例,每个点都有一个高度,可以看成每个点都有一个数字3。max(H-|Cx-X|-|Cy-y|)这个公式可以看出每个金字塔的一点到中心点的距离=该点高与中心点高的差值,看这个点是否满足中心点的条件,如果满足,则输出答案5.遍历找到中心点的可能性:xi和yi是0到100之间的值,那么这个坐标系有一个总计101乘以101点。那么当我们检查每个点是否满足中心点的条件时,我们需要遍历给定的N个点,N的最大值也是100。因此最多需要遍历101次101次100次,在规定时间内完成程序是可行的。6、如何查看中心点是否满足条件?假设遍历的第i个点的坐标为xi,yi给出的N个点中,每个点的高度为cy,坐标为cx,cy。那么我们可以发现这个点到圆心的距离是distance=|xi-cx|+|yi-cy|中心点的高度可以通过cy+distance的值求出。当所有点计算出的高度不一致时,说明该点不满足中心点要求。如图,假设黑色三角形所在的坐标点(5,5)为中心点,由黄点和红点计算出的中心点高度分别为12和10。(5,5)不满足中心点要求如图,假设黑色三角形所在的坐标点(2,2)为中心点,黄色坐标点,红色坐标点而蓝色坐标点绿色坐标点和绿色坐标点得到的中心点高度为6,说明坐标点(2,2)满足中心点7的要求另外需要注意的是看公式max(H-|Cx-X|-|Cy-y|,0)就是如果某个坐标点,离中心点很远很远。此时它的高度也为0,比如中心点在(50,50),中心点的高度为10,这个点的点坐标为(10,10)。根据公式,这个点的高度确实是0。max(10-40-40,0)=max(-70,0)==0。但是对于这些点,如果我们按照前面的方法计算中心点的高度,那么中心点的高度就是(0+40+40)=80,和计算出来的中心点的高度是一样的通过其他法线坐标点。10是矛盾的,所以通过一个合格的中心点。但对于这个给定的坐标点,中心点高度的计算不应该是一个参考值。因此,对于到中心点的距离超过中心点高度的坐标点,我们应该忽略它们,不计入中心点的判断。只有到中心点的距离=中心点的高度,h=0,我们才会考虑包含中心点的判断代码arr=[]n=int(input())foriinrange(n):arr.append([int(s)forsininput().split("")])importmathdefcalculate(n,arr):foriinrange(101):forjinrange(101):centerH=-100forarinarr:posX=ar[0]posY=ar[1]posH=ar[2]ifposH>0:ifcenterH==-100:centerH=posH+int(math.fabs(i-posX))+int(math.fabs(j-posY))继续tmp=posH+int(math.fabs(i-posX))+int(math.fabs(j-posY))iftmp!=centerH:centerH=-2breakforarinarr:posX=ar[0]posY=ar[1]posH=ar[2]ifposH==0:ifint(math.fabs(i-posX))+int(math.fabs(j-posY))