這道題。。太特麼多細節了。。
題意:在平面直角座標系中給你n個點,stan和ollie玩乙個遊戲,首先stan在豎直方向上畫一條直線,該直線必須要過其中的某個點,然後ollie在水平方向上畫一條直線,該直線的要求是要經過乙個stan之前畫過的點。 這時候平面就被分割成了四塊,兩個人這時候會有乙個得分,stan的得分是平面上第1、3象限內的點的個數,ollie的得分是平面上第2、4象限內的點的個數,在統計的時候在所畫線上的點都不計算在內。求最終stan使得自己的最差得分最高,並且輸出此時ollie的得分。
題解:
我們可以列舉哪顆星星是中心點,然後就可以知道他們所確定的直線。
線上可以維護四個值:up,down,left,right,分別表示線上四個方位有多少顆星星。
然後我們只要求bl,就可以知道其它:
tl=橫座標比x小的星星總數-bl-left
tr=y座標比x大的星星總數-tl-up
br=y座標比x小的星星總數-bl-down
各種細節》<
1 #include2 #include3 #include4 #include5 #include6posted @using
namespace
std;78
const
int n=200010,inf=(int)1e9+100;9
int n,pl,mx,c[n],cntx[n],cnty[n],sumx[n],sumy[n],sx[n][2],sy[n][2
],u[n],d[n],l[n],r[n],a1[n],a2[n];
10bool
num[n];
11struct
nodea[n];
14struct
ndp[2*n];
1718
bool cmp_num(int x,int y)
19bool cmp_d(nd x,nd y)
20bool
cmp_a(node x,node y)
2125
int maxx(int x,int y)
2627
void
clear()
2837
38void add(int
x)39
42int getsum(int
x)43
4849
intmain()
5064 sort(p+1,p+1+pl,cmp_d);
65 mx=0;p[0].d=inf;
66for(int i=1;i<=pl;i++)
6772
73 sort(a+1,a+1+n,cmp_a);
74//
for(int i=1;i<=n;i++)
75//
printf("%d %d\n",a[i].x,a[i].y);
76for(int i=1;i<=n;i++)
7781
//for(int i=1;i<=mx;i++)
82//
printf("i = %d %d %d\n",i,cntx[i],cnty[i]);
83for(int i=1;i<=n;i++)
8488
for(int i=1;i<=mx;i++)
8993
for(int i=1;i<=n;i++)
94101
//for(int i=1;i<=n;i++)
102//
105for(int i=1;i<=n;i++)
106117
int ans=0,nl=0
;;118
for(int i=1;i<=mx;i++)
119122 printf("
stan: %d; ollie:
",ans);
123 memset(num,0,sizeof
(num));
124for(int i=0;i<=n;i++)
125if(a1[i]==ans) num[a2[i]]=1
;126
for(int i=0;i<=n;i++)
127if(num[i]) printf("%d"
,i);
128 printf("
;\n"
);129
}130
return0;
131 }
2016-11-07 20:29
攔路雨偏似雪花 閱讀(
...)
編輯收藏
poj 2464 線段樹統計區間 兩棵樹
仔細分析的話,不用說了,我只是盡自己的力量去寫乙個盡量好看的 思路說一下 就是先統計這個點的上區間有多少點,下區間有多少點,然後x排序再求上下區間,這個時候便可以得知已經更新進去的點一定在該點的左下方 左上方 下方。由此統計出每個點被作為標準點畫出,每個人的得分情況。view code 1 incl...
樹狀陣列POJ2155
poj 2155是一道很不錯的題目,表面上看,這題的要求似乎和樹狀陣列的使用方法恰好相反,改變的是乙個區間,查詢的反而是乙個點。實際上可以通過乙個轉化巧妙的解決。首先對於每個數a定義集合up a 表示 定義集合down a 表示。可以發現對於任何a於是對於這道題目來說,翻轉乙個區間 a,b 為了便於...
poj 2481(樹狀陣列)
這題樹狀陣列明顯可解,不解釋,但是注意有相同的奶牛的處理 include include include include define n 100005 using namespace std int c n tem struct dian d n int cmp dian a,dian b int...