zoukankan      html  css  js  c++  java
  • uvalive3695Distant Galaxy

    题意:给出平面上的n个点,找一个矩形,使得边界上包含尽量多的点。

    代码:

    View Code
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <algorithm>
     4 #define DEBUG
     5 using namespace std;
     6 struct ZZ{
     7     int x, y;
     8     bool operator < (const ZZ& p) const{
     9         return x<p.x;
    10     }
    11 };
    12 int max(int a, int b){
    13     return a>b?a:b;
    14 }
    15 const int MAXN = 100 + 10;
    16 ZZ p[MAXN];
    17 int n, m, y[MAXN], on[MAXN], on2[MAXN], zl[MAXN];
    18 
    19 int solve(){
    20     sort(p, p+n);
    21     sort(y, y+n);
    22     m = unique(y, y+n) - y;
    23     if(m<=2) return n;
    24     
    25     int ans = 0;
    26     for(int a=0; a<m; a++){
    27         for(int b=a+1; b<m; b++){
    28             int ymin = y[a];
    29             int ymax = y[b];
    30 
    31             int k = 0;
    32             for(int i=0; i<n; i++){
    33                 if(i==0 || p[i].x!=p[i-1].x){
    34                     k++;
    35                     on[k] = on2[k] = 0;
    36                     if(k==0) zl[k] = 0;
    37                     else zl[k] = zl[k-1] + on2[k-1] - on[k-1];
    38                 }
    39                 if(p[i].y>ymin && p[i].y<ymax) on[k]++;
    40                 if(p[i].y>=ymin && p[i].y<=ymax) on2[k]++;
    41             }
    42             if(k<=2) return n;
    43 
    44             int M = 0;
    45             for(int j=1; j<=k; j++){
    46                 ans = max(ans, zl[j]+on2[j]+M);
    47                 M = max(M, on[j]-zl[j]);
    48             }
    49         }
    50     }
    51     return ans;
    52 }
    53 int main(){
    54 #ifndef DEBUG
    55     freopen("in.txt", "r", stdin);
    56 #endif
    57     int cas=0;
    58     while(scanf("%d", &n)==1 && n){
    59         for(int i=0; i<n; i++){
    60             scanf("%d%d", &p[i].x, &p[i].y);
    61             y[i]=p[i].y;
    62         }
    63         printf("Case %d: %d\n", ++cas, solve());
    64     }
    65     return 0;
    66 }

    这题感觉自己还是没理解透彻。

    Greatness is never a given, it must be earned.
  • 相关阅读:
    Android EditText内容监听
    Android模仿QQ空间图片上传——原理
    PHP新手入门1——表单
    linux下ftp常用命令
    TextView所有属性
    iOS开发-删除字典中的null
    去除导航栏下方的横线
    应用的启动视图 LauchView
    App所需申请资料
    应用本地化
  • 原文地址:https://www.cnblogs.com/zjutzz/p/2910292.html
Copyright © 2011-2022 走看看