Kadj Squares 几何思维

Kadj Squares

题意:不断加45°角站立的正方形,在互不相交的情况下,使得每个正方形底端点尽量靠左,求在上方视角可以看到的正方形编号

解法:

先求每个正方形左右端点

L[i] R[i] X[i] 分别表示 i正方形的左端点、右端点、边长

因为每个新正方形 i 总会和另外一个正方形 j 的一条边重合,由此可计算新正方形左端点坐标L= R[j]-fabs(X[i]-X[j])/sqrt(2)

每加一个正方形,和之前所有正方形枚举计算出L  取所有L中的最大值,是合法情况 且 是最优解

其次求

每个正方形左右有效端点(上方可见范围)

更新每个正方形之间的覆盖影响

i 正方形 对前面 j 正方形的影响:

1.若X[j]<X[i] 则 j 正方形 在 i 正方形下方 , 更新 j 正方形有效端点 

2.若X[j]>X[i] 则 j 正方形 在 i 正方形上方,更新 i 正方形有效端点

更新完后,若 i 正方形 可见范围 >0 ,则可见,输出

#include  <map>
#include  <set>
#include  <cmath>
#include  <math.h>
#include  <queue>
#include  <cstdio>
#include  <vector>
#include  <climits>
#include  <cstring>
#include  <cstdlib>
#include  <iostream>
#include  <algorithm> 
#define down DOWN
using namespace std;
double X[55];
double L[55],R[55];
double g=sqrt(double(2));
int main() 
{
	int n;
	while(~scanf("%d",&n)&&n)	
	{
		memset(vis,0,sizeof(vis)) ;
		double mx=0;
		int mxi=-1;
		for(int i=0;i<n;i++)
		{
			scanf("%lf",&X[i]);
		}
		for(int i=0;i<n;i++)
		{
			double l=0;
			for(int j=0;j<i;j++)
			{
				l=max(l,R[j]-fabs(X[i]-X[j])/g);
			}
			L[i]=l;
			R[i]=l+X[i]*g;
		}

		int flag=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<i;j++)
			{
				if(X[j]<X[i]&&L[i]<R[j])
				{
					R[j]=L[i];
				}
				if(X[i]<X[j]&&R[j]>L[i])
				{
					L[i]=R[j];
				}
			}
		}
		for(int i=0;i<n;i++)
		{
			if(R[i]-L[i]>1e-10)
			{
				if(flag==0)
				{					
				flag=1;
				printf("%d",i+1);
				}
				else printf(" %d",i+1);
			}
		}
		
		printf("\n");
	}
}

 

### 回答1: `squares.append()`是Python语言中列表对象的一个方法,用于在列表末尾添加一个元素。例如,如果你有一个名为"squares"的列表,并且想在其末尾添加数字9,你可以使用以下代码: ``` squares.append(9) ``` 这将在列表末尾添加数字9。 ### 回答2: 在Python中,squares.append()是一个列表方法,用于向列表中添加元素。该方法接受一个参数,即要添加的元素,并将该元素添加到列表的末尾。 例如,假设我们有一个空列表squares。我们可以使用以下代码将一个元素添加到列表中: squares = [] squares.append(4) 现在,squares列表将包含一个元素,即数字4。我们可以进一步使用append()方法来添加更多的元素到列表中。例如: squares.append(9) squares.append(16) squares.append(25) 现在,squares列表将依次包含数字4、9、16和25。 总结而言,squares.append()是一个有用的列表方法,它允许我们在Python中向列表中添加元素。无论列表是否为空,我们都可以使用append()方法将元素添加到列表的末尾。 ### 回答3: `python squares.append`是Python语言中的一个方法,用于将一个元素追加到列表(list)中。在使用该方法时,需要先创建一个列表对象,并且可以在括号内指定要追加的元素。 例如,以下是一个使用`squares.append`的示例: ```python squares = [] # 创建一个空的列表对象 # 使用append方法将元素依次追加到列表中 squares.append(1) squares.append(4) squares.append(9) squares.append(16) print(squares) # 输出结果为:[1, 4, 9, 16] ``` 在上述示例中,我们首先创建了一个空的列表对象`squares`。然后,使用`squares.append`方法依次向列表中追加了四个元素,分别是1、4、9和16。最后,通过`print(squares)`将列表内容打印输出,结果为`[1, 4, 9, 16]`。 总而言之,`python squares.append`是用于将一个元素追加到列表中的Python方法,可以方便地扩充列表的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值