Educational Codeforces Round 41(已补D,E)
D. Pair Of Lines
題目大意:
給\(n\)個點,問是否存在兩條直線(可以為同一條)能覆蓋所有的點。
解題思路:
首先一個或者兩個或者三個點都是肯定可以用兩條線覆蓋的。
如果點的個數大于等于三個,那么我們已經可以確定至少一條線的:
點1和點2可能在一條線上,點2和點3可能在一條線上,點3和點1可能在一條線上。
我們試著確定其中一條線后,去掉在線上的所有點,剩下的點肯定在另一條線上,這樣利用剩下的點就可以確定另一條直線。
用到一個公式:\(abc\)三點共線\((c - a)\times(c - b)=0\)
E. Tufurama
題目大意:
給\(n\)個數的數列\(a\),問有多少對下標\(x,y(x<y)\),使得\(a[x]\geq y,a[y]\geq x\)。
解題思路:
大體思路是先遍歷一遍數組,求出\(a[y]\geq x\)中最大的下標\(x\),
然后再遍歷一遍數組,用樹狀數組求出\(a[x]\geq y\)的所有\(x\)。
最大可能下標可以這樣求:\(x=max\{a[y],y-1\}\)。
為什么要求最大呢?因為是為了配合樹狀數組的求和,這樣就不會重復。
每次求到的最大下標\(x\)對應的\(y\)可以用\(vector\)保存。
因為每個\(y\)只能出現一次,所以時間復雜度為\(O(nlogn)\)
轉載于:https://www.cnblogs.com/ZengWangli/p/8804837.html
總結
以上是生活随笔為你收集整理的Educational Codeforces Round 41(已补D,E)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PADS 快捷键
- 下一篇: 算法学习--Day5