LA3695 - Distant Galaxy

原创 2015年07月10日 21:13:56
\epsfbox{p3694.eps}

Input 

There are multiple test cases in the input file. Each test case starts with one integer N , (1$ \le$N$ \le$100) , the number of star systems on the telescope. N lines follow, each line consists of two integers: the X and Y coordinates of the K -th planet system. The absolute value of any coordinate is no more than 109 , and you can assume that the planets are arbitrarily distributed in the universe.

N = 0 indicates the end of input file and should not be processed by your program.

Output 

For each test case, output the maximum value you have found on a single line in the format as indicated in the sample output.

Sample Input 

10 
2 3 
9 2 
7 4 
3 4 
5 7 
1 5 
10 4 
10 6 
11 4 
4 6 
0

Sample Output 

Case 1: 7

#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;
const int MAXN = 110;
int n;
int Left[MAXN], on[MAXN], on2[MAXN];
struct node
{
    int x, y;
    bool operator < (const node & a)const
    {
        return x < a.x;
    }
}P[MAXN];
int y[MAXN];
int solve()
{
    sort(P,P+n);
    sort(y,y+n);
    int m = unique(y,y+n) - y;//cout<<m<<endl;
    if(m<=2)return n;
    int ans = 0;
    for(int i=1; i<m; i++)//上边界
    {
        for(int j=0; j<i; j++)//下边界
        {
            int l = 0;
            Left[l] = 0;
            on[l] = on2[l] = 0;
            for(int k =0; k<n; )//从左到右选择竖线
            {
                //if(k==0||P[k].x!=P[k-1].x)
                {
                    l++;
                    int s = 0;
                    Left[l] = Left[l-1];
                    on[l] =  on2[l] = 0;
                    if(P[k].y == y[i] || P[k].y == y[j])//在线上的点
                    {
                            Left[l] ++;
                            on[l] ++;
                    }
                    if(P[k].y<y[i]&&P[k].y>y[j]) s++;
                    k++;
                    while(k<n&&P[k].x==P[k-1].x)
                    {
                        if(P[k].y == y[i] || P[k].y == y[j])//在线上的点
                        {
                            Left[l] ++;
                            on[l] ++;
                        }
                        if(P[k].y<y[i]&&P[k].y>y[j]) s++;
                        k++;
                    }
                    on[l]+=s;
                    on2[l]+=s;
                }
            }

          /*  cout<<"***"<<y[i]<<"---->"<<y[j]<<"***"<<endl;
            for(int k=0; k<l; k++)
            {
                cout<<"Left["<<k<<"] = "<<Left[k]<<" , ";
                 cout<<"on["<<k<<"] = "<<on[k]<<" , ";
                  cout<<"on2["<<k<<"] = "<<on2[k]<<endl;
            }
            cout<<"*****************************"<<endl;*/
            if(l<=2)return n;
            int maxs=0;
            for(int k=1; k<=l; k++)
            {
                ans = max(ans, Left[k] + on2[k] + maxs);
                maxs = max(maxs,on[k]-Left[k]);
            }
            //ans = max(ans,maxs);

        }
    }
    return ans;
}
int main()
{
    int cs = 1;
    while(scanf("%d",&n)!=EOF&&n)
    {
         for(int i=0; i<n; i++)
         {
             scanf("%d%d",&P[i].x,&P[i].y);
             y[i] = P[i].y;
         }
         printf("Case %d: %d\n", cs++, solve());
    }
    return 0;
}


 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

LA 3695 Distant Galaxy(扫描线)

Distant Galaxy Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on U...

UVALive 3695 Distant Galaxy(枚举)

题意:给出平面上的n个点,找出一个矩形,使得边界上包含尽量多的点。 思路:直接离散化暴力的话复杂度是O(n^4),考虑离散化后原图形就变成了一个矩形,其中有点的位置值为1,没有点的位置值为0。 这就转...

部分枚举(遥远的银河,LA 3695)

一开始没看清题,以为不一定平行。。。然后就不会了。。。 看了题解写了一遍,发现求某个值最好写在一个函数里,否则有时候代码中间要出一个特例就会很麻烦,甚至要goto。写在函数里一个return...

【Jason's_ACM_解题报告】Distant Galaxy

Distant Galaxy 解题报告

Distant Galaxy

Description You are observing a distant galaxy using a telescope above the Astronomy Tower, and you ...

【瞎搞】 HDU 3299 Distant Galaxy 枚举

line表示矩阵横边上的点 on1表示左边竖边shang

uva1382 Distant Galaxy

离散化+前缀和+扫描
  • sdfzyhx
  • sdfzyhx
  • 2016年11月12日 22:14
  • 111

UVa:1382 Distant Galaxy

错了一个小地方调了一上午。。跪。。 首先要将所有点离散化,这里注意所有出现的数字最多是不只100个的,因为有x和y两个坐标,所以数组要开200。 特判只有一行的情况。其他时候枚举上下两行,注意此时...
  • kkkwjx
  • kkkwjx
  • 2014年03月08日 11:38
  • 676

UVa 1382 Distant Galaxy 解题报告(枚举 + 前缀和)

1382 - Distant Galaxy Time limit: 3.000 seconds You are observing a distant galaxy using a teles...
  • kbdwo
  • kbdwo
  • 2014年07月18日 16:38
  • 746

uva 1382 Distant Galaxy (枚举)

uva 1382 Distant Galaxy You are observing a distant galaxy using a telescope above the Ast...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LA3695 - Distant Galaxy
举报原因:
原因补充:

(最多只允许输入30个字)