POJ 2008

这道题,说实话,细节很多。不过,我没想到,光细节就能搞死人了。。。

参考了http://www.cppblog.com/varg-vikernes/archive/2010/03/12/109559.html

首先,要把所有牛放到坐标系上来表示。目的,就是求出包含最多点的直角三角形。
直角三角形的两条直角边上都必须有点,也就是一组牛中的具有最小height的点和具有最小width的点。
直角三角形的边长也是固定的,cw = C/B,ch = C/A。这个还好说,从那个限制条件可以推出来的。初中都学过,呵呵。

Step1:求出经过一个点的所有可能存在的三角形。
其实也就是在该点下方的灰色区域中选择点来确定一个三角形。

Step2:求出经过一个点的所有可能存在的三角形中,最多包含的点数。
解法相当精妙。

求一个三角形内的点数,可以分解为一个矩形内的点数减去一个梯形内的点数。

用这个方法,求出最上面那个三角形的点数之后。可以继续递推得到下面其他三角形的点数。

也就是加上一个矩形,再减去一个梯形。
如果点按照高度排序以后,那么后面矩形里的点一定是后出现的。这样就可以做到随时增加矩形。
但是减去梯形这个操作,就难理解一点,把点按照A*H + B*W来排序,就能保证后面梯形里的点一定是后出现的。

可见,A*H + B*W 值的大小决定了他们的位置分布。完全可以保证这个顺序。
这种数形结合的方法实在是相当精妙!

在退出点的时候,我选择用优先队列来做。写得很锉

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cctype>
 5 #include <vector>
 6 #include <queue>
 7 #include <algorithm>
 8 #define LL unsigned __int64
 9 #pragma comment(linker, "/STACK:1024000000,1024000000")
10 using namespace std;
11
12 const int N=1010;
13
14 struct Node{
15     int x,y;
16     int AH;
17     bool operator <(const Node &a) const {
18         if(y>a.y) return true;
19         else if(y==a.y){
20             if(x<a.x) return true;
21         }
22         return false;
23     }
24 }node[N];
25 int n,A,B,C,xh,yh;
26 struct Int_Node{
27     int AH;
28     Int_Node(int x){AH=x;};
29     bool operator<(const Int_Node &a)const {
30         if(AH<a.AH) return true;
31         return false;
32     }
33 };
34 priority_queue<Int_Node>Q;
35
36 int main(){
37     int ah,ans=0;
38     while(scanf("%d",&n)!=EOF){
39             ans=0;
40             scanf("%d%d%d",&A,&B,&C);
41             yh=C/B; xh=C/A;
42             for(int i=0;i<n;i++){
43                 scanf("%d%d",&node[i].x,&node[i].y);
44                 node[i].AH=A*node[i].x+B*node[i].y;
45             }
46             sort(node,node+n);
47             for(int i=0;i<n;i++){
48                 int xmin=node[i].x,ymin=node[i].y;
49                 ah=A*xmin+B*ymin;
50                 int j;
51                 for(j=0;j<i;j++){
52                     if(node[j].y==ymin) break;
53                     if(node[j].x<=xmin+xh&&node[j].y<=ymin+yh&&node[j].x>=xmin)
54                         if(A*node[j].x+B*node[j].y-ah<=C)
55                         Q.push(Int_Node(node[j].AH));
56                 }
57                 for(j;j<n&&node[j].x<=xmin+xh&&node[j].y==ymin&&node[j].x>=xmin;j++)
58                 Q.push(Int_Node(node[j].AH));
59                 int ts=Q.size();
60                 ans=max(ans,ts);
61                 for(int k=j;node[k].y+yh>=node[i].y&&k<n;k++){
62                     if(node[k].y<ymin){
63                         ymin=node[k].y;
64                         ah=A*xmin+B*ymin;
65                         int p;
66                         for(p=k;node[p].y==ymin&&p<n;p++){
67                             if(node[p].x<=xmin+xh&&node[p].x>=xmin){
68                                 Q.push(Int_Node(node[p].AH));
69                             }
70                         }
71                         k=p-1;int tmp;
72                         while(!Q.empty()){
73                             tmp=Q.top().AH;
74                             if(tmp-ah>C){
75                                 Q.pop();
76                             }
77                             else
78                                 break;
79                         }
80                         ts=Q.size();
81                         ans=max(ans,ts);
82                     }
83                 }
84                 while(!Q.empty())
85                 Q.pop();
86             }
87             printf("%d\n",ans);
88     }
89     return 0;
90 }

时间: 2025-01-31 03:54:20

POJ 2008的相关文章

POJ 3686.The Windy&#39;s 最小费用最大流

The Windy's Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5477   Accepted: 2285 Description The Windy's is a world famous toy factory that owns M top-class workshop to make toys. This year the manager receives N orders for toys. The ma

[题解]poj Meteor Shower

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16313   Accepted: 4291 Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will crash into earth and destroy anything they hit. Anxious fo

POJ 3322(广搜)

---恢复内容开始--- http://poj.org/problem?id=3322 题意:http://jandan.net/2008/01/24/bloxorz.html就是这个鬼游戏 我也是郁闷了,昨天就看到一道连连看的题目,今天就是这个游戏.都懵逼了. 思路:这个游戏的难度主要是在于它是第一个长方体,而不是一个正方体,不过是正方体也就不存在这个游戏了,所以我们要想办法来标记它. 我首先定义了这个长方体有三种状态. 对于第一种状态来说,它是的底面是一个正方形,四边都是一个长方形. 第二种

POJ 3928 &amp; HDU 2492 Ping pong(树状数组求逆序数)

题目链接: PKU:http://poj.org/problem?id=3928 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Description N(3<=N<=20000) ping pong players live along a west-east street(consider the street as a line segment). Each player has a unique skill rank. To im

POJ 3683(Priest John&#39;s Busiest Day-强连通分量解决2-SAT)[Template:2-SAT]

Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8144   Accepted: 2769   Special Judge Description John is the only priest in his town. September 1st is the John's busiest day in a year because there is an old le

POJ 3683.Priest John&#39;s Busiest Day 2-SAT

Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10144   Accepted: 3472   Special Judge Description John is the only priest in his town. September 1st is the John's busiest day in a year because there is an old l

poj 3684 Physics Experiment 弹性碰撞

Physics Experiment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1489   Accepted: 509   Special Judge Description Simon is doing a physics experiment with N identical balls with the same radius of R centimeters. Before the experiment,

POJ 3579- Median

 Description Given N numbers, X1, X2, ... , XN, let us calculate the difference of every pair of numbers: ∣Xi - Xj∣ (1 ≤ i < j ≤ N). We can get C(N,2) differences through this work, and now your task is to find the median of the differences as quic

POJ 3692 Kindergarten (二分图 最大团)

Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5660   Accepted: 2756 Description In a kindergarten, there are a lot of kids. All girls of the kids know each other and all boys also know each other. In addition to that, some