第九屆河南省ACM省賽 D 飛彈發射

2021-07-31 11:42:56 字數 1732 閱讀 3882

alpha 機構研發出一種新型智慧型飛彈,它能夠在雷達檢測到的區域內,選擇一條前進的路徑,

擊破路徑上所有的目標物。

雷達位於(0,0)處,它能夠檢測到兩條射線之間的區域(不妨設在第一象限)。

飛彈一開始置放在(0,0)處,它可以在雷達能檢測到的區域內先選擇乙個目標物擊破,然後

再繼續前進,選擇另乙個目標物擊破。注意,飛彈不能沿著這兩條射線前進,當然也不能停在原

地。可以假設,飛彈一旦發射,其能量無比大,前進的路徑無限長。

已知雷達能夠檢測到區域,其射線 1:ax-by=0 和射線 2:cx-dy=0。alpha 機構的總指揮希望

在發現目標群的第一時刻,計算出一條可以擊破最多目標物的路徑。

第一行: t 表示以下有 t 組測試資料(1≤t ≤8)

對每組測試資料:

第 1 行: n 表示目標物的個數

第 2 行: a b c d 代表兩條射線的斜率分別是 a/b 和 c/d。

接下來有 n 行,每行 2 個正整數 xi yi 即第 i 個目標物的座標。

(1) n<=10^5 0<=a, b, c, d<=10^5 a 和 b 不會同時為 0,c 和 d 不會同時為 0;

(2) 0<= xi , yi <=10^6 i=1,…..,n

每組測試資料,輸出佔一行,即飛彈能擊破的最多目標數。1

15 1 3 2 1

3 16 2

4 22 5

4 56 6

3 41 6

2 17 4

9 35 3

1 315 5

12 44

解題思路:

首先,我們只需要考慮在曲線之內的點。然後思考,如何判斷飛彈是前進的?(這個問題在比賽的時候一直困擾我)我們將兩條射線看成x軸和y軸進行座標變換,有了新的座標後,很容易可以判斷前進的情況(x遞增,y遞增)。變換之後用nlogn的lis求解即可。這裡要注意乙個問題,當x軸不變,y軸增大時,lis有可能將其統計在內。我們在排序時設定,當x相等時y從大到小排序,可以解決上述問題。

這題的題面其實表達的不是很清楚,比如是否有多個目標在同一位置,兩條射線的相對位置是否固定。。。然而題目在不考慮這些因素的情況下都能a。。。

**:

#include #includeusing namespace std;

const int n=110000;

struct node

a[n],b[n];

bool cmp(node a,node b)//先按x從小到大排序,如果x相等按y從大到小排序,這樣排除了沿y軸前進的情況

return low;

}int dp(int n)//lis nlogn模板

else

}return len;

}int main()

{ int t,n;

double a1,b1,c1,d1;

cin>>t;

while(t--)

{cin>>n;

cin>>a1>>b1>>c1>>d1;

//保證c1/d1射線在a1/b1上面,資料中不存在相反情況

/*if(b1==0||c1==0||(b1!=0&&d1!=0&&c1/d1

飛彈發射 河南省第九屆省賽D題

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 alpha 機構研發出一種新型智慧型飛彈,它能夠在雷達檢測到的區域內,選擇一條前進的路徑,擊破路徑上所有的目標物。雷達位於 0,0 處,它能夠檢測到兩條射線之間的區域 不妨設在第一象限 飛彈一開始置放在 0,0 處,它可以在雷達能檢測...

NYOJ 飛彈發射 河南省第九屆省賽D題 LIS

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 alpha 機構研發出一種新型智慧型飛彈,它能夠在雷達檢測到的區域內,選擇一條前進的路徑,擊破路徑上所有的目標物。雷達位於 0,0 處,它能夠檢測到兩條射線之間的區域 不妨設在第一象限 飛彈一開始置放在 0,0 處,它可以在雷達能檢測...

河南省第九屆省賽 通道安全

時間限制 1000 ms 記憶體限制 65535 kb 難度 2描述 alpha 機構有自己的一套網路系統進行資訊傳送。情報員 a 位於節點 1,他準備將乙份情報 傳送給位於節點 n 的情報部門。可是由於最近國際紛爭,戰事不斷,很多通道都有可能被遭到監 視或破壞。經過測試分析,alpha 情報系統獲...