題意:有一堆兔子,還有乙個r為半徑的圓,要求找到最大集合滿足這個集合裡的兔子兩兩連邊的直線不經過圓。
思路:發現如果有兩個點之間連邊不經過圓,那麼他們到圓的切線會構成一段區間,那麼這兩個點的區間一定會有交集,形如s0 s1 e0 e1
同樣的,如果是n個點,那就是s0 s1 s2..sn e0 e1 e2.. en
因此,我們列舉那個起始點,然後對於其他點我們按照s排序,對於e做最長上公升子串行即可。時間複雜度o(n^2 logn)
1 #include 2 #include 3 #include 4 #include 5const
double pi = 3.14159265358979324;6
double th1[2000], th2[2000], b[2000], x[2000], y[2000
];7 std::pairdouble, double>, int> a[2000];8
int t[2001], t2[2001], f[2001
], n;
9 std::vectoransv;
10double
r;11
intmain()
23int ans = 1
;24 ansv.push_back(0
);25
for (int i = 0; i < n; i++) else
37if (a[l].first.second < 0) a[l].first.second += 2*pi;
38 a[l].second =j;
39 l++;40}
41 std::sort(a, a +l);
42for (int j = 0; j < l; j++) b[j] =a[j].first.second;
43 std::sort(b, b +l);
44for (int j = 1; j <= l; j++) t[j] = 0;45
for (int j = 0; j < l; j++)
56if (ans2 != -1
) 62
}63 printf("
%d\n
", ans);
64return0;
65 }
FJ省隊集訓DAY3 T1
思路 我們考慮如果取掉乙個部分,那麼能影響到最優解的只有離它最近的那兩個部分。我講的貌似不是很清楚。還有,蜜汁80分,打死也改不出來。1 include2 include3 include4 include5 include6 struct nodea 1200005 9 struct segmen...
FJ省隊集訓DAY3 T2
思路 如果乙個dag要的路徑上只要一條邊去切掉,那麼要怎麼求?很容易就想到最小割,但是如果直接做最小割會走出重複的部分,那我們就這樣 反向邊設為inf,這樣最小割的時候就不會割到了,判斷無解我們直接用tarjan 1 include2 include3 include4 include5 inclu...
NOIP 提高組 day1 T1 小凱的疑惑
題目描述 小凱手中有兩種面值的金幣,兩種面值均為正整數且彼此互素。每種金幣小凱都有 無數個。在不找零的情況下,僅憑這兩種金幣,有些物品他是無法準確支付的。現在小 凱想知道在無法準確支付的物品中,最貴的價值是多少金幣?注意 輸入資料保證存在 小凱無法準確支付的商品。輸入輸出格式 輸入格式 輸入資料僅一...