Kadj Squares
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 3594   Accepted: 1456

Description

In this problem, you are given a sequence S1S2, ..., Sn of squares of different sizes. The sides of the squares are integer numbers. We locate the squares on the positive x-y quarter of the plane, such that their sides make 45 degrees with x and y axes, and one of their vertices are on y=0 line. Let bi be the x coordinates of the bottom vertex of Si. First, put S1 such that its left vertex lies on x=0. Then, put S1, (i > 1) at minimum bi such that

  • bi > bi-1 and
  • the interior of Si does not have intersection with the interior of S1...Si-1.

The goal is to find which squares are visible, either entirely or partially, when viewed from above. In the example above, the squares S1S2, and S4 have this property. More formally, Si is visible from above if it contains a point p, such that no square other than Si intersect the vertical half-line drawn from p upwards.

Input

The input consists of multiple test cases. The first line of each test case is n (1 ≤ n ≤ 50), the number of squares. The second line contains n integers between 1 to 30, where the ith number is the length of the sides of Si. The input is terminated by a line containing a zero number.

Output

For each test case, output a single line containing the index of the visible squares in the input sequence, in ascending order, separated by blank characters.

Sample Input

4
3 5 1 4
3
2 1 2
0

Sample Output

1 2 4
1 3

Source

题意:

n个正方形45度角的放,边靠着边,放完了之后从顶部往下看。有哪些正方形没有被挡住。

思路:

我们从这张图来看,正方形之间的三角形是等腰三角形,边长是两个正方形边长的较小值。

我们现在记下每个正方形的最左的横坐标,和最右的横坐标,和边长。并且我们假设输入的边长是实际边长投影在横坐标上的长度。

因为大家都同时放大,是不影响结果的。

当我们摆好了前面i-1个正方形之后,摆第i个正方形。那么可以知道第i个正方形的左端点应该是前面所有正方形的最右端点减去两个正方形边长之差。

摆好第i个正方形之后我们再看,前i-1个正方形中有哪几个被遮掉了一部分。

有两种情况,一种是左边的遮掉右边的,一种是右边的遮掉左边的。

 #include <iostream>
#include <set>
#include <cmath>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
//#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define inf 0x7f7f7f7f const int maxn = ;
int n;
struct node{
int len, l, r;
}squ[maxn]; int main()
{
while(scanf("%d", &n) != EOF && n){
for(int i = ; i <= n; i++){
scanf("%d", &squ[i].len);
squ[i].l = ;
for(int j = ; j < i; j++){
squ[i].l = max(squ[i].l, squ[j].r - abs(squ[i].len - squ[j].len));
}
squ[i].r = squ[i].l + * squ[i].len;
for(int j = ; j < i; j++){
if(squ[j].r > squ[i].l){
if(squ[i].len > squ[j].len){
squ[j].r = squ[i].l;
}
else{
squ[i].l = squ[j].r;
}
}
}
} bool flag = true;
for(int i = ; i <= n; i++){
if(squ[i].l < squ[i].r){
if(flag){
printf("%d", i);
flag = false;
}
else{
printf(" %d", i);
}
}
}
printf("\n"); }
return ;
}

最新文章

  1. RabbitMQ框架学写笔记-20161201
  2. javascript 中断函数的使用 setInterval();
  3. linux笔记三-------根目录相关说明
  4. javascript中的JSON序列化与反序列化
  5. linux后端运行
  6. 图形用户界面(graphical user interface)
  7. 【Xamarin挖墙脚系列:配置Mac之间的连接问题】
  8. mac相关
  9. 【iOS】7.4 定位服务-&gt;2.1.4 定位 - 官方框架CoreLocation 案例:指南针效果
  10. 【Windows 10 应用开发】细说文本资源文件(resw)
  11. [Luogu 1284]三角形牧场
  12. Shiro学习(一)——Shiro简介
  13. redux源码解读(一)
  14. ${pageContext.request.contextPath}相关问题总结
  15. delphi正则表达式学习笔记(二)
  16. Spring Cloud 学习网址
  17. 安装微软dynamics AX2012R3-AOS(含域服务器的安装)
  18. 分布式ID生成器PHP+Swoole实现(下) - 代码实现
  19. linux 版本查询
  20. 安装python各类工具包、IDE以及著名开源模块如kaldi等的简单总结

热门文章

  1. 运动规划 (Motion Planning): MoveIt! 与 OMPL---44
  2. [RN] 04 - React Navigation
  3. VS2010安装包制作全过程图解
  4. 高可用(HA)架构
  5. [AX]AX2012 Interaction class
  6. iOS开发--NSDateFormatter
  7. mysql分组查询获取组内某字段最大的记录
  8. html/php/mysql乱码
  9. 《Lua程序设计》第6章 深入函数 学习笔记
  10. Java的I/O操作