POJ3347 Kadj Squares
嘟嘟嘟
题意:给出一堆正方形的边长,且这些正方形都是\(45 ^ {\circ}\)斜放着并且紧挨着的,求从上往下看能看到几个正方形。
真是一道好题……跟计算几何关系不大。
想一下,如果我们能求出正方形的所有端点,那么这道题就变成了从上往下看,能看到几条线段了。
对于一个正方形\(s_i\)的左端点\(s_i.l\),我们可以从\(s_j(j < i)\)得到:即假设\(s_i\)和\(s_j\)紧挨着,那么如果\(s_i.len \leqslant s_j.len\),那么\(s_i.l = s_j.l + s_j.len + s_i.len\),否则\(s_i.l = s_j.l + s_j.len * 3 - s_i.len\)。然后\(s_i.l\)就是这些所有运算结果的\(max\)值。最后更新\(s_i.r = s_i.l + s_i.len * 2\)。
讲道理这里面加上的应该是\(s_i.len / \sqrt{2}\)。然而怕掉精度,就都约掉了。
这样就把正方形转化成了线段。然后就是线段覆盖的问题了。一个比较清奇的思路是用别的线段的左右端点坐标修改自己的,如果最后自己的\(s_i.l \geqslant s_i.r\),说明这个线段已经全被挡死了。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 55;
inline ll read()
{
  ll ans = 0;
  char ch = getchar(), last = ' ';
  while(!isdigit(ch)) last = ch, ch = getchar();
  while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
  if(last == '-') ans = -ans;
  return ans;
}
inline void write(ll x)
{
  if(x < 0) x = -x, putchar('-');
  if(x >= 10) write(x / 10);
  putchar(x % 10 + '0');
}
int n;
struct Square
{
  int l, r, len;
}s[maxn];
int main()
{
  while(scanf("%d", &n) && n)
    {
      for(int i = 1; i <= n; ++i)
	{
	  s[i].len = read();
	  s[i].l = 0;
	  for(int j = 1; j < i; ++j)
	    {
	      int tp;
	      if(s[i].len <= s[j].len) tp = s[j].l + s[j].len + s[i].len;
	      else tp = s[j].l + s[j].len * 3 - s[i].len;
	      if(tp > s[i].l) s[i].l = tp;
	    }
	  s[i].r = s[i].l + (s[i].len << 1);
	}
      for(int i = 2; i <= n; ++i)
	for(int j = 1; j < i; ++j)
	  if(s[j].len < s[i].len && s[j].r > s[i].l) s[j].r = s[i].l;
	  else if(s[j].len > s[i].len && s[j].r > s[i].l) s[i].l = s[j].r;
      for(int i = 1; i <= n; ++i)
	if(s[i].l < s[i].r) write(i), space;
      enter;
    }
  return 0;
}
然而我还是把他归到了计算几何这个分类……
POJ3347 Kadj Squares的更多相关文章
- poj3347 Kadj Squares【计算几何】
		Kadj Squares Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3594 Accepted: 1456 Desc ... 
- poj3347 Kadj Squares (计算几何)
		D - Kadj Squares Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Su ... 
- POJ 3347 Kadj Squares
		Kadj Squares Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2132 Accepted: 843 Descr ... 
- POJ3347:Kadj Squares——题解
		http://poj.org/problem?id=3347 题目大意:给定一些正方形的边长,让他们尽可能向左以45°角排列(不能互相重合),求在上面看只能看到哪几个正方形. ———————————— ... 
- POJ 3347 Kadj Squares (计算几何)
		题目: Description In this problem, you are given a sequence S1, S2, ..., Sn of squares of different si ... 
- POJ 3347 Kadj Squares (计算几何+线段相交)
		题意:从左至右给你n个正方形的边长,接着这些正方形都按照旋转45度以一角为底放置坐标轴上,最左边的正方形左端点抵住y轴,后面的正方形依次紧贴前面所有正方形放置,问从上方向下看去,有哪些正方形是可以被看 ... 
- 简单几何(线段覆盖) POJ 3347 Kadj Squares
		题目传送门 题意:告诉每个矩形的边长,它们是紧贴着的,问从上往下看,有几个还能看到. 分析:用网上猥琐的方法,将边长看成左端点到中心的距离,这样可以避免精度问题.然后先求出每个矩形的左右端点,然后如果 ... 
- Kadj Squares - POJ 3347
		题目大意:给一些序列的正方形的边长,然后让这个正方形倾斜45度,放在第一象限,一个角要紧挨着x轴,按照输入的顺序放下去,然后问最后从上往下看可以看到那些正方形? 分析:不能算是计算几何题..... ... 
- POJ 3347 Kadj Squares (线段覆盖)
		题目大意:给你几个正方形的边长,正方一个顶点在x轴上然后边与x轴的夹角为45度,每个正方形都是紧贴的,问从上面看能看的正方形的编号 题目思路:线段覆盖,边长乘上2防止产生小数,求出每个正方形与x轴平行 ... 
随机推荐
- ASP.NET页面支持的指令
			页面的处理指令 页面指令的处理用于配置执行该页面的运行时环境.在ASP.NET中,指令可以位于页面的任何位置,但良好且常见的习惯是将其置于文件的开始部分.除此,页面指令的名称是不区分大小写的,且指令的 ... 
- 6、Object、String、StringBuffer
			Java的Api以及Object类 API概念 * A:API(Application Programming Interface) * 应用程序编程接口 * B:Java API * 就是Java提 ... 
- c# MVC模式学习笔记_数据验证
			改变显示字段名称 设计字段规范 1.引用 using System.ComponentModel; using System.ComponentModel.DataAnnotations; 2.Dis ... 
- HDU 4747(AC不能)
			http://acm.hdu.edu.cn/showproblem.php?pid=4747 
- LinkedList实现队列存储结构
			package com.tercher.demo; import java.util.LinkedList; public class Queue { //用LinkedList 实现队列的数据存储结 ... 
- sql:PostgreSQL9.3  Using RETURNS TABLE vs. OUT parameters
			http://www.postgresonline.com/journal/archives/201-Using-RETURNS-TABLE-vs.-OUT-parameters.html http: ... 
- USACO06DEC Milk Patterns——Solution
			题目描述 Farmer John has noticed that the quality of milk given by his cows varies from day to day. On f ... 
- BZOJ4513: [Sdoi2016]储能表(数位dp)
			题意 题目链接 Sol 一点思路都没有,只会暴力,没想到标算是数位dp??Orz 首先答案可以分成两部分来统计 设 \[ f_{i,j}= \begin{aligned} i\oplus j & ... 
- Recovering InnoDB table from an .ibd file.
			Recovering an InnoDB table from only an .ibd file. Sometime you may need to recover a table when all ... 
- 使用 js 实现文本过多时隐藏部分文本
			使用 js 实现文本过多时隐藏部分文本 情景描述: 有时候我们需要显示部分文字,就像 QQ 空间这样,先显示部分文字,加一个[查看全文],让用户选择是否查看全部 解决方法: 第一步:在一个 id 为 ... 
