首先這道題是zjoi2019裡面idea最簡單的題。
注意是idea最簡單的題,也就是說六道題口胡起來最簡單的是這道。那這道題憑什麼放在d2t3?
憑它細節巨多。。。
來,先口胡正解做法。
按照斜率給所有直線排序,考慮從答案小的往答案大的處理,把已經得到答案的直線跳過剩下的直線拿來做半平面交,然後列舉所有已經得到答案的直線,考慮x
xx處於什麼區間的時候這條直線會讓下面直線的排名+1,記錄所有變化位置,掃瞄線,更新答案。
沒了,思路就是這麼簡單,你讓我再把思路講詳細點我也不知道該怎麼講。如果看不懂說明你的計算幾何水平還沒到能做這道題的程度
然後是細節。
首先是做半平面交時候的細節。
第乙個細節,當交成下面這種情況的時候,三條線都要保留:
因為題目中排名的計算方式是「嚴格大於」,所以等於的情況不能夠影響它的排名,但是按照一般半平面交的寫法,這種情況是要彈掉的。。。
然後你看了一眼資料範圍,這是乙個開long double都會炸精度的範圍,你並沒有什麼好的辦法來處理這種情況。。。
於是你手寫乙個分數類,然後你發現它乘法爆long long 了,所以分數我們只能表示成a+b
/ca+b/c
a+b/
c的形式。。。
第二個細節,交成下面這種情況中間那條線是要彈掉的:
注意這裡實際上說的是中間那條線不能夠在x
xx為任何乙個整數的時候成為最大值。
但是本題要求的x
xx必須是乙個非負整數,所以中間那條線現在已經就宣告gg了
既然要求x
xx是乙個非負整數,那麼新的直線與原來直線的交點到了x
xx負半軸是需要把棧彈完的。
其實不容易注意到的細節就前面兩個,剩下的就是二分找到之前已經確定了答案的直線的影響範圍。這個其實還好,注意一下邊界,根據選擇記錄開區間還是閉區間,細節有所不同也不是很好說清楚,只有自己注意了。
具體實現不建議用任何實數型別,其實封裝乙個簡易的帶分數型別是可以做到的,因為只有賦值和比較,沒有帶分數之間的運算。
**:
#include
#define ll long long
#define re register
#define cs const
namespace io
template
<
typename t>
inline t get()
inline
intgi()
inline ll gl()
}using
namespace io;
using std::cerr;
using std::cout;
using pli=std::pair
int>
;#define fi first
#define se second
cs int n=
1e5+7;
struct frac
frac
(ll x,ll y)
ll flr
()cs
ll cel
()cs
bool
operator
<
(cs frac &x)cs
bool
operator
<=
(cs frac &x)cs};
int n,m,ct,tp;
int id[n]
,st[n]
,ans[n]
;ll a[n]
,b[n]
;frac x[n]
;pli q[n<<1]
;inline frac gx
(int x,
int y)
inline
void
solve
(int k)
x[tp+1]
=frac
(1ll
<<60,
1);for
(int re i=
1;i<=n;
++i)if(
~ans[i]
) q[
++ct]
=pli
(a[st[t]
]>=a[i]
?0ll:gx
(st[t]
,i).
flr()+
1,1)
; l=
2,r=tp,t=1;
while
(l<=r)
if(a[st[t]
]>a[i]
)q[++ct]
=pli(gx
(st[t]
,i).
cel(),
-1);
} std::
sort
(q+1
,q+ct+1)
;for
(int re i=
1,j=
1,p=
0;i<=tp;
++i)}}
signed
main()
);for(
int re i=
1;i<=m;
++i)
solve
(i);
for(
int re i=
1;i<=n;
++i)cout<
<<
" ";
return0;
}
2019浙江省賽
題意 n個點的二叉樹 無向邊 的單向邊,構造一條到達且只到達每個點一次的路徑。題解 兩次dfs。第一次dfs為向i 1優先,2i次之。然而,發現某些點有兩條出路,這是由於該點在最底層 有些點沒有達到,這是因為這些點在最後一層或倒數第二層的右下角 第二次dfs時先判斷該點的右子節點是否達到過,如果沒到...
好題推薦(浙江省選)矩陣構造
前幾天我被很多次問到關於矩陣的問題,簡單點被其他大佬秒切,難度大會被吐槽orz 然而我在洛谷肝題時發現一道很好的題 潘塔納爾沼澤地號稱世界上最大的一塊濕地,它地位於巴西中部馬托格羅索州的南部地區。每當雨季來臨,這裡碧波蕩漾 生機盎然,引來不少遊客。為了讓遊玩更有情趣,人們在池塘的 建設了幾座石墩和石...
2018 浙江省選一試 反思
省選一試反思 省選開始之前,我的心態還是很好的,不是特別緊張,也不是特別放鬆。進了考場,先是要輸密碼解壓題面和樣例,但是我輸入了好幾次老師的密碼還是不對,心裡就急了。開啟記事本,輸入好了又核對過了複製進去還是不對。就這樣搞了10分鐘,最後聽說感嘆號是中文全形,又弄了兩三次,才終於看到了題面。但是,我...