Contest 984
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的更多相关文章
- CF#483(div2 C)
http://codeforces.com/contest/984/problem/C C. Finite or not time limit per test 1 second memory lim ...
- 【cf 483 div2 -C】Finite or not?(数论)
链接:http://codeforces.com/contest/984/problem/C 题意 三个数p, q, b, 求p/q在b进制下小数点后是否是有限位. 思路 题意转化为是否q|p*b^x ...
- 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 ...
- CF练习记录
2018/5/6 Codeforces Round #478 (Div. 2) C http://codeforces.com/contest/975/problem/C Valhalla Siege ...
- codeforce#483div2C-Finite or not?数论,GCD
传送门:http://codeforces.com/contest/984/problem/C 这道题 题意:求q/p是否能用k进制有限表示小数点后的数: 思路:数学推理: 1.首先把q/ ...
- Codeforces Round #483 (Div. 2) B. Minesweeper
题目地址:http://codeforces.com/contest/984/problem/B 题目大意:扫雷游戏,给你一个n*m的地图,如果有炸弹,旁边的八个位置都会+1,问这幅图是不是正确的. ...
- 牛客假日团队赛5J 护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)
链接:https://ac.nowcoder.com/acm/contest/984/J 来源:牛客网 护城河 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- 牛客假日团队赛5 K 金币馅饼 (DP 基础题)
链接:https://ac.nowcoder.com/acm/contest/984/K 来源:牛客网 金币馅饼 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...
- 牛客假日团队赛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 ...
随机推荐
- JUC---10JMM
前提:什么是Volatile? Java 虚拟机提供轻量级的同步机制 1.保证可见性------->JMM 2.不保证原子性 3.禁止指令重排 一.什么是JMM 1.JMM : Java内存模型 ...
- OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...
- 【转】Setting up SDL on Windows
FROM: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/index.php Setting up SDL on Windows Last ...
- CSS中的position属性笔记
一般有5个属性,分别是:static,absolute,relative,fixed,inherit static 自然定位:这个是默认值,没有定位,再设置top,rignt,bottom,left会 ...
- Ordering Cows
题意描述 好像找不到链接(找到了请联系作者谢谢),所以题目描述会十分详细: Problem 1: Ordering Cows [Bruce Merry, South African Computer ...
- git rebase的时候捅娄子了,怎么办?在线等……
大家在使用git的过程当中有闯过祸吗? 我闯过,我闯的第一个祸就是使用git rebase造成的,虽然后来最终还是解决了,但是还是给我吓得不轻.当时的事情是这样的. 我们来看下这张图: 简单解释一下这 ...
- Android Studio导入github项目源码步骤
1.从github上将源码下载下来 2.打开AS,新建一个新项目(我选择了EmptyActivity) 3.先不要在AS 中打开源码,来整理源码 在源码的目录下面,将project下的build.gr ...
- 1、Web应用
一 Web应用的组成 接下来我们学习的目的是为了开发一个Web应用程序,而Web应用程序是基于B/S架构的,其中B指的是浏览器,负责向S端发送请求信息,而S端会根据接收到的请求信息返回相应的数据给浏览 ...
- 英特尔与 Facebook 合作采用第三代英特尔® 至强® 可扩展处理器和支持 BFloat16 加速的英特尔® 深度学习加速技术,提高 PyTorch 性能
英特尔与 Facebook 曾联手合作,在多卡训练工作负载中验证了 BFloat16 (BF16) 的优势:在不修改训练超参数的情况下,BFloat16 与单精度 32 位浮点数 (FP32) 得到了 ...
- MSSQL 高并发下生成连续不重复的订单号
参考: https://www.cnblogs.com/h-change/p/6699683.html 这里在数据库层面生成的,经测试确实不会重复. 附上自己修改后的版本,这里也可以预先生成一年的记录 ...