牛客 2020.10.20 TG 前两题
T1 GCD
数学水题。。。
对于每个数,如果这个数有两个及以上的质因数的话,它所有除 \(1\) 之外的因数求 \(GCD\) 的值一定为 \(1\)。那么判断是否是质数或质数的次方即可(质数除 \(1\) 之外的因数只有它本身,而质数的次方除 \(1\) 之外的质因数只有一个,故不存在两个及以上的质因数。
再来考虑特殊的是质数的次方 \(x^n\) 的情况,它除 \(1\) 之外的因数一定只有 \(x\),所以得出这个质数并累加答案即可。那就跑欧拉筛的时候边跑边暴力更新呗。
#include <cstdio>
#include <cmath>
const int MAXN = 1e7 + 5;
int num[MAXN], len = 0;
bool flag[MAXN];
int vis[MAXN];
typedef long long LL;
void euler(int n) { // 欧拉筛
for(int i = 2; i <= n; i++) {
if(!flag[i]) {
num[++len] = i;
int t = 1;
while((LL)t * i <= n) { // 暴力枚举次方
t *= i;
vis[t] = i; // 记录这个次方对应的质数
flag[t] = true;
}
}
for(int j = 1; j <= len; j++) {
if(i * num[j] > n)
break;
flag[i * num[j]] = true;
if(i % num[j] == 0)
break;
}
}
return ;
}
int main() {
int m, n;
scanf ("%d %d", &m, &n);
euler(n);
LL ans = 0;
flag[1] = true;
for(int i = m; i <= n; i++) {
if(i == 1) // 排除1的情况
continue;
if(!flag[i]) // 是质数
ans += i; // (所有除1之外的因数的GCD即是本身
else if(vis[i]) // 如果是质数的某个次方
ans += vis[i]; // 加上那个对应的质数
else // 否则这个数有两个及以上的质因子,加一即可
ans++;
}
printf("%lld\n", ans);
return 0;
}
T2 包含
显然如果用n方的算法会卡到飞起。。。(右边巨佬考场 DFS 记忆化过掉了呢
考虑优化。我们在每一次输入的时候更新一下有哪些数 \(\&\) 上这个数等于内个数本身。记这个集合内的数为 \(Q\),即是寻找有哪些 \(X\) 满足 \(Q \& X = X\)。
对于一个 \(Q \& X = X\),在二进制数位中 \(X\) 等于 \(1\) 的位,对应的 \(Q\) 中的位一定等于 \(1\),但因为 \(Q\) 是确定的,所以我们考虑依次替换掉 \(Q\) 二进制当中等于 \(1\) 的位,将其改为 \(0\),枚举所有情况即是找到了所有的 \(X\)。
至于如何枚举 \(Q\) 中为 \(1\) 的位……芜湖起飞。
int t = x;
while(t) {
vis[t] = true;
t = (t - 1) & x;
}
就是上述代码,最好在草稿纸上手推一下,不然很难理解。
为此我还和JC讨论了好久。
结论:上述代码按以下顺序枚举为 \(1\) 的位改其为 \(0\)。
Q: 1 0 0 0 1 0 0 1
1. ^
2. ^
3. ^ ^
4. ^
5. ^ ^
6. ^ ^
7. ^ ^ ^
#include <cstdio>
const int MAXN = 1000005;
bool vis[MAXN];
int main() {
int n, m;
scanf ("%d %d", &n, &m);
for(int i = 1; i <= n; i++) {
int x;
scanf ("%d", &x);
if(vis[x])
continue;
int t = x;
while(t) {
vis[t] = true;
t = (t - 1) & x;
}
}
while(m--) {
int x;
scanf ("%d", &x);
if(vis[x])
printf("yes\n");
else
printf("no\n");
}
return 0;
}
牛客 2020.10.20 TG 前两题的更多相关文章
- 2020牛客多校第八场K题
__int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时, ...
- 牛客网数据库SQL实战解析(51-61题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(41-50题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 2019牛客多校第八场 F题 Flowers 计算几何+线段树
2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...
- 牛客网数据库SQL实战解析(31-40题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(21-30题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(11-20题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(1-10题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...
随机推荐
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- Java学习的第三十一天
1.使用RandomAccessFile随机读写文件 2.没有问题 3.明天学习综合实例
- Linux 系统编程 学习 总结
背景 整理了Liunx 关于 进程间通信的 很常见的知识. 目录 与 说明 Linux 系统编程 学习:000-有关概念 介绍了有关的基础概念,为以后的学习打下基础. Linux 系统编程 学习:00 ...
- js练习题之查找数组中的位子
输出描述: 如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1 输入例子: indexOf([ 1, 2, 3, 4 ], 3) 输出例子: 2 function indexOf(ar ...
- 15 CGI和WSGI
15 CGI和WSGI CGI是通用网关接口,是连接web服务器和应用程序的接口,用户通过CGI来获取动态数据或文件等. CGI程序是一个独立的程序,它可以用几乎所有语言来写,包括perl,c,lua ...
- Pycharm激活码,最新2020Pycharm永久激活码!!!
分享一个Pycharm激活码给各位,是一个永久的Pycharm激活码~ 要是下边的这个Pycharm激活码失效了的话,大家可以关注微信公众号:Python联盟,然后回复"激活码"即 ...
- Hive Join优化
在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化: 1. 只支持等值连接 2. 底层会将写的HQL语句转换为MapRed ...
- .Net5,C#9 新语法(逻辑和属性模式,记录)
代码: namespace ConsoleApp1{ class Program { static void Main(string[] args) { //创建list数组,=号右边可省略 List ...
- [读书笔记] Python语言及其应用
记录下秋招期间看的一本Python工具书<Python语言与其应用>,查漏补缺,部分内容整理如下: 易混淆概念 1.1 删除 - del,remove()和pop() 1.2 复制 - 浅 ...
- vue-count-to(简单好用的一个数字滚动插件)
vue-count-to是一个无依赖,轻量级的vue组件,可覆盖easingFn. 1. 你可以设置两个属性startVal和endVal,它会自动判断计数或倒计时.支持vue-ssr.vue-cou ...