集训第一天心得
作者:互联网
集训第一天心得
一.收获
-
当要求出一下式子的结果时,时间效率较高的处理方法:
int a[maxn],ans; for(int i=1;i<=n;i++){ for(int e=i+1;e<=n;e++){ for(int j=e+1;j<=n;j++){ ans+=a[i]*a[e]*a[j]; } } }
时间效率 $ O(n^3) $
int a[maxn],ans; int tot,totway; for(int i=1;i<=n;i++){ ans+=totway*a[i]; totway+=tot*a[i]; tot+=a[i]; }
时间效率 $ O(n) $
原理解释:讲不清,自行体会
-
二分
-
给定\(n\)个元素的数组\(a_i\)和\(m\)个元素的数组\(b_i\),拿每个\(a_i\)除以\(b_j\)得到一个商。问这\(n∗m\)个商中第\(k\)大值是多少。输出\(7\)位小数。
-
\(n, m≤10^5, k≤10^9\),且数组元素为\(1\)到\(10^9\)的整数。
思路:先对\(b,a\)排序。二分一个商,分别求出对于每一个\(b\)有多少个\(a\)满足它。\(O(m\log n\log 10^9)\)
优化:我们递增的枚举\(b\)中元素,那么满足商要求的\(a\)的个数只会越来越多,这样整体上最终对a也会递增的扫一遍。最终总的时间复 杂度\(O(m+n)\log 10^9\)
-
有\(n\)个人到一家餐馆点菜。这家餐馆总共有\(m\)道菜,每一道菜都有两个属性——美味度和价格。这n个人每周都会来一次,每次只会点一道菜或不点。在这\(n\)个人中,有\(p\)个人比较挑剔,他们只能接受美味度大于等于一定值\(a_i\)的菜;有\(q\)个人比较贫穷,他们只能点价格小于等于一定值\(b_i\)的菜。
-
现在请你计算:这些人至少要来几周,才可能能把餐馆的所有的菜都点过一遍?
-
\(p+q≤n≤50000,m≤200000\)
思路:二分时间(\(ans\))。先对菜用美味度降序排序,对挑剔的人降序排列可以发现每个挑剔的人能吃的菜都是排序之后数组的一段前缀,并且后一个挑剔的人能吃到的菜一定包含前一个人的。把菜按美味度从大到小扔到一个价格的大根堆里,一共扔\(p\)次,每次扔的都是第\(i\)挑剔的人可以取的,然后取出\(ans\)个(不足则全取),作为第\(i\)挑剔的人吃的\(ans\)道菜。接下来再让穷的人尽量吃,看剩下的菜是否多余正常人的个数\(\times ans\)
-
-
三分
-
\(t\)组数据,\(n\)个选手参加比赛,比赛分为跑步和骑车两项,但总长固定。已知每位选手进行每种项目时的速度,求是否可以通过调整各项目长度使某指定选手获胜;如果可以获胜还需输出与第二名的耗时差最大值及此时各项目长度。
-
\(n⩽20, t⩽100\)
不妨设跑步长度为\(x\),易得(要赢的人)\(t_m=\frac x {v_1} + \frac {L-x} {v_2} =(\frac{1}{v_1}-\frac{1}{v_2})x+\frac{1}{v_2}L\)。
对于与其他人的时间差 \(d_{t}=-(\frac{1}{v_1}+\frac{1}{v_{ti}}-\frac{1}{v_2}-\frac{1}{v_{t2}})x+(\frac{1}{v_2}-\frac{1}{v_{t2}})L\) 显然这是一个一次函数。
但是我们要求的是第二名的耗时差最大值,即上面的一次函数取最小值中的最大值。
三分即可
-
在一个2维平面上有两条传送带,分别为线段AB和线段CD。小燚在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在小燚想从A点走到D点,他想知道最少需要走多长时间。
思路:直接在\(AB\) 上三分,再在 \(CD\) 上三分即可。
-
标签:10,frac,挑剔,第一天,int,ans,美味,心得,集训 来源: https://www.cnblogs.com/LQX-OI/p/16488995.html