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 ...
随机推荐
- 【3】TensorFlow光速入门-训练及评估
本文地址:https://www.cnblogs.com/tujia/p/13862357.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- 【4】TensorFlow光速入门-保存模型及加载模型并使用
本文地址:https://www.cnblogs.com/tujia/p/13862360.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- B. GameGame 解析(思維、博弈)
Codeforce 1383 B. GameGame 解析(思維.博弈) 今天我們來看看CF1383B 題目連結 題目 兩個人在玩遊戲,有一個長度為\(n\)的數列\(a\),每次每個人選一個數字和目 ...
- PHP代码审计04之strpos函数使用不当
前言 根据红日安全写的文章,学习PHP代码审计的第四节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完题目会用一个实例来加深巩固,这是之前写的,有兴趣可以去看看: PHP代码 ...
- Java学习的第五十天
1.求长方体的体积要求类中用但参数的方法去求 public class Cjava { public static void main(String[]args) { Box b1=new Box(1 ...
- JWT安装配置
1.1 安装JWT pip install djangorestframework-jwt==1.11.0 1.2 syl/settings.py 配置jwt载荷中的有效期设置 import date ...
- Spring框架之beans源码完全解析
导读:Spring可以说是Java企业开发里最重要的技术.而Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Oriented Programmin ...
- inno steup 安装判断 进程是否运行
1.添加了卸载判断用语 2.添加了安装程序进程是否存在使用了wmi服务 ; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #d ...
- 总结distinct、group by 、row_number()over函数用法及区别
distinct和group by 是一样的,查询去重,只能是全部重复的,也可以理解为针对单例,因为一行有一个字段不一样,他们就会认为这两行内容是不重复的.但是使用row_number()over这个 ...
- 内网渗透 day13-漏洞复现
漏洞复现 目录 1. 永恒之蓝(445端口) 2. 手动微笑漏洞(21端口 vsftpd2.3.4版本) 3. ingres数据库DBMS后门(1524端口) 4. distcc漏洞(3632) 5. ...