A

先手取最大,后手取最小,答案就是第 \(\left\lceil\frac{n}{2}\right\rceil\) 小的数。

nth_element 可以做到 \(O\left(n\right)\)。

B

模拟,时间复杂度 \(O\left(nm\right)\)。

C

如果约分后 \(q\) 中存在某个质因数 \(b\) 中没有,则无法除尽,比较显然就不证了,可以对着十进制想一想。

但是太大了根号分解质因数会爆炸怎么办?

发现我们并不关心具体的质因数,我们只需要将他们去掉,这不禁让人想到 \(\gcd\)。

于是就有了一个比较慢的做法,\(q\) 每次除以 \(\gcd\left(q,b\right)\),如果 \(\gcd=1\) 了就停下了,此时如果 \(q\) 是 \(1\) 就能整除了。

时间复杂度先鸽着,可能会 \(\texttt{TLE}\)。

考虑能否更进一步优化。在做一次 \(\gcd\) 的时候,我们发现 \(b\) 中有的质因数如果在 \(\gcd\) 中没出现,那么它在 \(q\) 中必定也没出现。也就是说有贡献的质因数一定在 \(\gcd\) 中出现了,所以我们可以直接将 \(b\) 用 \(\gcd\left(q,b\right)\) 替换,这样的时间复杂度先鸽着。

代码贴一下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read()
{
ll A;
bool K;
char C;
C=A=K=0;
while(C<'0'||C>'9')K|=C=='-',C=getchar();
while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
return(K?-A:A);
}
ll gcd(ll _,ll __)
{
return(!_?__:gcd(__%_,_));
}
bool pd(ll x,ll y)
{
return(gcd(x,y)==1?x==1:pd(x/gcd(x,y),gcd(x,y)));
}
int main()
{
int n;
ll p,q,b;
n=read();
while(n--)
{
p=read(),q=read(),b=read();
q/=gcd(p,q);
puts((pd(q,b)?"Finite":"Infinite"));
}
return 0;
}

回寝室的时候问了下马阿克,发现我傻逼了……只要判一下 \(b^{\log q}\) 能否被 \(q\) 整除就好了,这样的时间复杂度是 \(O\left(n\log q\right)\) 的(瓶颈反而在于约分和算出 \(\log q\))。

D

很有趣的一道 DP 题。

对于一个长度为 \(len\) 的区间,被它包含的所有长度小于等于 \(len\) 的区间都能取到。

所以我们可以令 \(a_{i,j}\) 表示长度为 \(i\),以 \(j\) 作为左端点的区间的答案。

发现所有长度小于等于 \(i-1\) 的区间在 \(\left[j,j+i-2\right]\) 和 \(\left[j+1,j+i-1\right]\) 中至少能取到一次。

现在只要解决新加入的一个区间 \(\left[j,j+i-1\right]\),即快速算出 \(f\left(j\to j+i-1\right)\)。

模拟出整个倒三角形,其实 \(f\left(j\to j+i-1\right)\) 就是第 \(i\) 行第 \(j\) 列的数。

时间复杂度 \(O\left(n^2+q\right)\)。

E

卡常好题。

首先要观察到人进入电梯的顺序是固定的,可以搞进状态里。而楼层和容纳人数很少,也可以搞进状态里。

此处要注意,在电梯中,我们只关心一个人的目标楼层,而不关心他的具体编号。

令 \(dp_{now,high,pos1,pos2,pos3,pos4,0/1}\) 表示前 \(now\) 个人,当前楼层为 \(high\),电梯里的四个人的目标楼层(为 \(0\) 代表当前位置没人)以及当前电梯必须向上/下移动。

最后一维是为了防止出现反复横跳的情况。

发现转移比较恶心,不知道具体的转移顺序,考虑记忆化搜索。但问题又来了,\(2000\times 9\times 10^4\times 2=360000000\),这么大的数组拿头开。

此处有两个解决方案:

  • 强行限制状态,将目标楼层从大到小排序或者从小到大排序,这样方案数按不同数的个数算一下就是 \(\binom{10}{4}+\binom{10}{3}\times 3+\binom{10}{2}\times 3+\binom{10}{1}=715\)。

    只需要开 \(2000\times 9\times 715\times 2=25740000\) 大小的数组即可。
  • 滚动数组优化记忆化搜索。依次枚举人,第一维只与上一个有关。所以当前人进入电梯时从上一个转移过来,其它情况直接记搜。

    只需要开 \(9\times 10^4\times 2^2=360000\) 大小的数组即可。

当然你可以两个一起用。

显然的,这两种方法都非常之慢,尤其是第二种。如果你写了第二种的话,要加上四个优化(第一种没试过不清楚):

  • 当有人下电梯时,递归下去后直接返回。因为能下电梯显然下,代价一样,这样不会占着位子。
  • 当有人上电梯时,递归下去后直接返回。因为能上电梯显然上,代价一样,避免下次特意回来接。
  • 尽量把递归下去后算出的值存下来,避免再次调用。虽然后面递归时会直接返回,但递归本身非常耗时间
  • 火车头。

前两个加上后可以免去很多多余的取最小值步骤。

时间复杂度 \(O\left(n\right)\),\(2000\) 最慢跑了 \(2979ms\) 你敢信?

另:有直接 DP 的做法,似乎是根据接人送人的顺序来搞的,参考这里

要看记搜的第一种做法则可以参考这里

Contest 984的更多相关文章

  1. CF#483(div2 C)

    http://codeforces.com/contest/984/problem/C C. Finite or not time limit per test 1 second memory lim ...

  2. 【cf 483 div2 -C】Finite or not?(数论)

    链接:http://codeforces.com/contest/984/problem/C 题意 三个数p, q, b, 求p/q在b进制下小数点后是否是有限位. 思路 题意转化为是否q|p*b^x ...

  3. Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!]

    题目链接:http://codeforces.com/contest/984 A. Game time limit per test:2 seconds memory limit per test:5 ...

  4. CF练习记录

    2018/5/6 Codeforces Round #478 (Div. 2) C http://codeforces.com/contest/975/problem/C Valhalla Siege ...

  5. codeforce#483div2C-Finite or not?数论,GCD

    传送门:http://codeforces.com/contest/984/problem/C 这道题 题意:求q/p是否能用k进制有限表示小数点后的数:   思路:数学推理:     1.首先把q/ ...

  6. Codeforces Round #483 (Div. 2) B. Minesweeper

    题目地址:http://codeforces.com/contest/984/problem/B 题目大意:扫雷游戏,给你一个n*m的地图,如果有炸弹,旁边的八个位置都会+1,问这幅图是不是正确的. ...

  7. 牛客假日团队赛5J 护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)

    链接:https://ac.nowcoder.com/acm/contest/984/J 来源:牛客网 护城河 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  8. 牛客假日团队赛5 K 金币馅饼 (DP 基础题)

    链接:https://ac.nowcoder.com/acm/contest/984/K 来源:牛客网 金币馅饼 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  9. 牛客假日团队赛5 L Catch That Cow HDU 2717 (BFS)

    链接:https://ac.nowcoder.com/acm/contest/984/L 来源:牛客网 Catch That Cow 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 3 ...

随机推荐

  1. 【6】TensorFlow光速入门-python模型转换为tfjs模型并使用

    本文地址:https://www.cnblogs.com/tujia/p/13862365.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  2. 使用js模拟点击,点击a链接 $("#abc ").click(); 无效的解决方案

    摘要: 问题分析 点击A标签本身,并不会触发跳转到指定链接的事件,就是说,我们平时都是点击的A标签中的文字了. 所以要想用JS模拟点击A标签事件,就得先往A标签中的文字添加能被JS捕获的元素,然后再用 ...

  3. Java学习的第三十二天

    1. 2.综合例题没太看懂 3.明天复习第十二章

  4. Linux 系统编程 学习:11-线程:线程同步

    Linux 系统编程 学习:11-线程:线程同步 背景 上一讲 我们介绍了线程的属性 有关设置.这一讲我们来看线程之间是如何同步的. 额外安装有关的man手册: sudo apt-get instal ...

  5. django JsonResponse返回中文时显示unicode编码(\u67e5\u8be2)

    django JsonResponse返回中文时显示unicode编码(\u67e5\u8be2) 关注公众号"轻松学编程"了解更多. 原因 这个unicode编码,是python ...

  6. [Luogu P2051] [AHOI2009]中国象棋 (状压DP->网格DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2051 Solution 看到这题,我们不妨先看一下数据范围 30pt:n,m<=6 显然搜索,直接 ...

  7. C/C++四种取整函数floor,ceil,trunc,round

    处理浮点数操作常用到取整函数,C/C++提供了四种取整函数 floor函数 floor函数:向下取整函数,或称为向负无穷取整 double floor(double x); floor(-5.5) = ...

  8. linux下的终端利器----tmux

    转:tmux 是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件.类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远 ...

  9. LR逻辑回归附代码

    参考https://zhuanlan.zhihu.com/p/74874291 import pandas as pdpd.set_option('display.max_columns', 500) ...

  10. ERP的协议管理的操作与设计--开源软件诞生27

    赤龙ERP协议与订单进阶讲解--第27篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/re ...