2017杭二聯考 穿越矩形

2022-05-27 10:45:10 字數 2661 閱讀 2834

題目背景: 

幻想鄉的創始人之一,八雲紫,有著強大的控制結界的能力,可以瞬間消除一定範圍內 所有彈幕。我們可以將其消除範圍視為乙個矩形,而彈幕可以視為動點。 

八雲紫想要嘲諷她的敵人,所以她希望只使用一次消除能力,盡可能多地消除彈幕。 

請你告訴她,在哪一時刻使用道具,可以消除盡可能多的彈幕。

問題描述: 

在平面上給定乙個矩形區域(也可能退化成線段或者點)。 矩形的邊與座標軸平行,左下端 點為 (xl,yl),右上端點為 (xr,yr)。 

給定 n 個動點,初始座標為 (xi, yi),運動方向為 (ui,vi),速度為 sqr

t((u

i)2+

(vi)

2)'>sqrt((ui)2+(vi)2)

sqrt((ui)2+(vi)2) 求在哪一時刻 t ( t ∈n ),在矩形內部及邊界的動點數目最多。 

如果有多個 t 滿足條件,輸出最小的 t 即可。

第一行 5 個正整數,n, xl, yl, xr, yr,表示動點個數和矩形區域。 

接下來 n 行,每行 4 個整數,xi, yi, ui, vi ,描述第 i 個動點。

在矩形內部及邊界的動點數目最多的時刻 t ( t ∈n )。 

如果有多個 t 滿足條件,輸出最小的 t 即可。

2 2 2 3 3 

3 1 -1 1 

2 3 1 -1

資料範圍: 

對於前 40% 資料, 1<= n <= 100, 1 <= xl, xr, yl, yr, xi, yi <= 100, -10 <= ui, vi <= 10 

對於 100% 資料,1<= n <= 10^5, 1 <= xl, xr, yl, yr, xi, yi <= 10^9, 0 <= |ui|, |vi|<= 10^5, xl <= xr, yl <= yr 

保證 n,xl,xr,yl,yr,xi,yi,ui,vi 均為整數.

數學,計算幾何

考試時看錯題目了,以為方向指的是從原點向給出的 (ui,vi)走(我以為是乙個座標),然後就gg了。。。

首先明確(ui,vi)是乙個向量,由於速度是sqrt((ui)2+(vi)2)sqrt((ui)2+(vi)2),向量分解一下就是橫座標+u,縱座標+v,然後模擬每一秒的運動情況,再判斷,就可獲得40分。(詳見work()函式)

一百分的做法呢?我們發現其實只要知道在哪乙個時間段內點在矩形上或中就可以了。我們預處理出每個點在矩形內部的時間(用臨界點計算),再將時間離散化,將每個點的時間差分,最後o(n)取最大即可。

交了一發wa了,90分,不知道錯了**。。。發現是小資料wa了,就可恥的加了個work()暴力程式去算。。。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11

#define rg register

12#define il inline

13#define pi acos(-1.0)

14#define ll long long

15using

namespace

std;

16struct

point;

19 point a[100005

];20

int n,xl,yl,xr,yr,cnt=0;21

intin[100005],out[100005

];22

int l[100005],r[100005

];23

int f[200005],rak[200005

];24

int c[200005

];25 map s;

26void

work()39}

40if(ans>maxn) maxn=ans,t=t;

41if(cnt>=10000000)45

}46}47

intmain()

61if(a[i].v==0) tyl=0,tyr=999999999;62

else

67if(txl<0) txl=0; if(txr<0) txr=-1;68

if(tyl<0) tyl=0; if(tyr<0) tyr=-1;69

int l=max(txl,tyl),r=min(txr,tyr);

70if(l>r) continue

;71 ++cnt;

72 l[cnt]=l,r[cnt]=r;73}

74for(int i=1;i<=cnt;i++) f[++f[0]]=l[i],f[++f[0]]=r[i];

75 sort(f+1,f+f[0]+1

);76

int tep=0;77

for(int i=1;i<=f[0];i++)

78if(i==1||f[i]!=f[i-1]) s[f[i]]=++tep,rak[tep]=f[i];

79for(int i=1;i<=cnt;i++)

83int maxn=0,t=0,j=0;84

for(int i=1;i<=tep;i++)

88 printf("%d"

,rak[t]);

89return0;

90 }

oracle 備份技術詳解(二) 聯機備份

聯機備份 熱備份 可以對正以archivelog方式執行的任何資料庫進行聯機備份,在此方法中,將歸檔聯機重做日誌,建立資料庫內的所有事務處理的全部日誌。oracle以迴圈方式寫聯機重做日誌。在寫滿第乙個日誌檔案後開始寫第二個 第三個直到寫滿為止,一旦最後乙個聯機重做日誌也寫滿,lgwr log wr...

sql注入(二) 聯合查詢及實際用途

假設先前已存在兩個表create test和goods 解決 使用聯合查詢 侷限 前提是這兩個表的列數必須相同 該處均為3列 解決 實戰1 也可以通過如下語句,來猜測確定goods表中的列數 注意此處預設不知道sqltest的列數及其中的內容 當select後面為n個任意數字,代表選中n列,不管在s...

2017「物聯中國」年度盛典在京啟動

12月8日下午,2017 物聯中國 年度盛典在京啟動。會上,新大陸科技集團副總裁陳繼勝表達了科技企業在物聯網領域的發展需求 我國的物聯網應用發展已經進入到實質性推高階段,物聯網已處於大規模爆發式增長的前夜 我們希望能夠和整個產業界攜手,一起打造融合物聯網產業 資本 機構對接的標準系統生態平台。201...