【数论思维题】Enlarge GCD【Codeforces Round #511 (Div. 2)】
题意:
给你 n 个数,分别为 a1、a2、...、ai、... an,现在从这n个数中删去p个数,使剩下的数的gcd变大。求最小的p。
思路:
一开始的思路是想用贪心做,先求出所有数字的gcd,然后将数字排序,再依次求gcd,如果与当前这个数字求出的gcd等于开始的那个gcd,就将这个数字删掉。
然后wa 8,很明显这个方法是错的,比如 2 4 7 14 21 这个序列,用这种方法就会出错。
接下来是正解。N = 1.5*1e7。
先对所有数求出gcd,然后对1-N内所有数进行标记,若题目中给出了 a[i],则 vis[a[i]]++,然后采用一种类似埃氏筛的方法。
i 从gcd+1到N进行循环,对于p[i] == 0,就将 i 的所有倍数k,p[k]标记为1,然后记录 i 的所有倍数中有cnt个在最开始题目给出的数列中出现了,那么对于这cnt个数,他们的gcd一定大于初始数列的gcd,因此问题就转化为了求cnt的最大值。
本问题就解决了。
反思:
这道题拿到手上之后,思路先是跑到了最简单的贪心,然后wa了之后,开始将每个数唯一分解进行筛数,与正解思想类似,但是正解是用所有数去筛,而唯一分解是用素数去筛,过了评测,但是终测挂了。
结束之后看到正解之后还是有一些小遗憾的,毕竟正解代码非常短......(比唯一分解什么的短多了......)
以后写题还是要考虑清楚,不要进行冗余操作,也不要漏操作。
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define rep(i,a,b) for(int i = a;i <= b;i++)
using namespace std;
const int N = 1.5*1e7+1000;int a[N],b[N];
int n;int gcd(int a,int b)
{return b == 0 ? a:gcd(b,a%b);
}int main()
{int d;scanf("%d",&n);scanf("%d",&d);a[d]++;rep(i,2,n){int x;scanf("%d",&x);a[x]++;d = gcd(d,x);}int ans = 0;rep(i,d+1,N-500){if(b[i] == 0){int cnt = 0;for(int j = i; j <= N-500; j += i){b[j] = 1;cnt += a[j];}ans = max(ans,cnt);}} if(ans == 0)printf("-1\n");else printf("%d\n",n-ans);return 0;
}
【数论思维题】Enlarge GCD【Codeforces Round #511 (Div. 2)】相关推荐
- Codeforces Round #511 (Div. 1) 题解
在学校熬夜打$cf$找死啊. A - Enlarge GCD 先求个$gcd$,然后对于每个$a[i]$都除以$gcd$. 之后我们只需要统计每个质数整除的个数即可. 因为带上所有数的$gcd$一定是 ...
- 第一次打CF的感受(附A-C题题解) -Codeforces Round #764 (Div. 3)
目录 A题-在子集上加一 B题-制作AP C题- 除以2和排列 个人感受 A题-在子集上加一 题目 Polycarp得到了一个整数数组a[1-n]作为礼物.现在,他希望执行一定数量的操作(可能为零), ...
- Codeforces Round #777 (Div. 2) 简训
Codeforces Round #777 (Div. 2) 简训 导语 涉及的知识点 题目 A Madoka and Math Dad B Madoka and the Elegant Gift C ...
- Codeforces Round #738 (Div. 2) A--D1
原题戳这里Codeforces Round #738 (Div. 2) A. Mocha and Math 题目大意 通过对某个区间内的数进行题目所给操作 希望最小化序列中的最大值 思路 万恶的位运算 ...
- Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...
- Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...
- Codeforces Round #698 (Div. 2)(A ~ F)6题全,超高质量题解)【每日亿题】2021/2/4
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #698 (Div. 2)(A ~ F)6题全,超 ...
- Codeforces Round #701 (Div. 2)赛后补题报告(A~D)
Codeforces Round #701 (Div. 2)赛后补题报告(A~D) A. Add and Divide 原题信息 http://codeforces.com/contest/1485/ ...
- Codeforces Round 700 (Div. 2) B题 英雄杀怪兽
Codeforces Round 700 (Div. 2) B题 链接: https://codeforces.com/contest/1480/problem/B 大致意思: n组数据,每组数据的第 ...
- Codeforces Round #699 (Div. 2) (A ~ F)6题全,超高质量良心题解【每日亿题】2021/2/6
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) (A.B.C)[每日亿题]2021/2/ ...
最新文章
- 分布式系统互斥性与幂等性问题的分析与解决
- 为了追求更快,CPU、内存、I/O都做了哪些努力?
- Linux page allocation failure 的问题处理 - zone_reclaim_mode
- Android ListView重写Adapter
- python定义16进制数组_python 文件转成16进制数组的实例
- JAVA数组Java StringBuffer 和 StringBuilder 类
- Mendix:低代码开发平台 让未来工作模式日渐明朗
- 轻量级PHP接口框架PhalApi开源接口框架 v2.17.1源码
- ERP框架开发中的License许可验证机制设计与实现 (包含源代码下载)
- java点击图片发出声音_[Java教程]点击放大图片
- nvidia-smi每0.1s实时显示显存使用情况,且数字变化处有白底
- Redhat 6.5安装JDK和Tomcat小记
- 计算机技术能力校本培训总结,教师现代教育技术校本培训总结(2篇)
- GIS开发进阶之路(十三) Activator和new的区别、GP工具输入参数问题、写入JObject到json文件、ArcGIS Server REST API、动态规划、贪心算法
- 防火墙的访问控制策略
- html扫码支付,WEB端第三方支付接入 - 支付宝 - 扫码支付
- 渲染算法学习(四)-- Environment Lighting
- Android 11源码 Framework修改默认usb连接模式为MTP模式
- 【jiasuba】高效办公 网络应用相关的Excel技巧
- 弹性方法计算连续梁板内力_连续梁、板按塑性法内力计算.ppt
热门文章
- Windows 7 SP1开发完毕 已进入测试阶段
- ISA2000资料大全(详细)
- android x86显卡驱动,全系列显卡精简版纯驱动(Windows_6.x_VGA_Drivers_lite_x86x64)(2016.09.12)...
- 平板Android调试打开log,Android 调试日志
- 1043 Is It a Binary Search Tree (25 分) BST反转?不反转 遍历+vector
- Python(二):基本数据类型、序列的基本操作
- Java将xml转docx,java对象与xml间的转换.docx
- linux密钥链接失败的原因,linux中ssh密钥登录失败问题解决办法
- steam服务器维护6月28,绝地求生6月28日维护更新公告 绝地求生6月28日更新内容汇总...
- Label高度根据内容变化SnapKi