正题

luogu
CF1305F


题目大意

给你n个数,每次操作可以使一个数+1或-1,让你用最小的操作数使所有数的gcd>1


解题思路

显然把所有数都修改为偶数可以得到 2|gcd,且步数 ≤n\leq n≤n

对于其它方案,至少有一半的数修改次数小于1(如果不满足,那其他数大于一半且步数 ≥2\geq 2≥2,所以步数大于n,不如前面的方案)

所以每次随机一个数进行质因数分解,然后考虑每个质因数作为gcd的最小步数(gcd可能是合数,但是只用满足有一个质因子就好了)

这样每一次操作得到正确答案的概率最小是 12\frac{1}{2}21​,如果取 k 个数得到正确答案的概率就是 2k−12k\frac{2^k-1}{2^k}2k2k−1​


code

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 200210
#define NN 1000010
using namespace std;
int n,w,p[NN];
ll x,ans,a[N],prime[NN];
map<ll,int>pp;
void work()
{for(int i=2;i<=1e6;++i){if(!p[i])prime[++w]=i;for(int j=1;j<=w&&i*prime[j]<=1e6;++j){p[i*prime[j]]=1;if(i%prime[j]==0)break;}}return;
}
ll get(ll x)
{if(pp[x])return ans;pp[x]=1;ll sum=0;for(int i=1;i<=n&&sum<ans;++i)sum+=min((a[i]>=x?a[i]%x:x),x-a[i]%x);return sum;
}
void solve(ll x)
{for(int i=1;i<=w&&prime[i]*prime[i]<=x;++i)if(x%prime[i]==0){ans=min(ans,get(prime[i]));while(x%prime[i]==0)x/=prime[i];}if(x>1)ans=min(ans,get(x));return;
}
int main()
{srand(2018729);scanf("%d",&n);work();for(int i=1;i<=n;++i){scanf("%lld",&a[i]);if(a[i]&1)ans++;}for(int k=1;k<=min(20,n/2)&&ans;++k){x=rand()*rand()%n+1;while(p[x])x=rand()*rand()%n+1;p[x]=1;solve(a[x]);solve(a[x]-1);solve(a[x]+1);}printf("%lld",ans);return 0;
}

【随机】Kuroni and the Punishment(CF1305F)相关推荐

  1. CF1305F Kuroni and the Punishment

    CF1305F Kuroni and the Punishment 题意: 给定 n 个数.每次可以选择将一个数 +1 或 -1 .求至少多少次操作使得整个序列都是正数且全部元素的 gcd>1 ...

  2. Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化

    传送门 文章目录 题意: 思路: 题意: 给你nnn个数,每次操作可以选择将某个数+1,−1+1,-1+1,−1,求最少进行多少次操作使得所有数都为正数且gcd>1gcd>1gcd> ...

  3. Codeforces 1305F Kuroni and the Punishment (随机化)

    题目链接 https://codeforces.com/contest/1305/problem/F 题解 真的想不出--然而大家都会 考虑枚举最终所有数的 \(\gcd\),设为 \(g\). \( ...

  4. Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!)

    Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!) 题号 题目 知识点 A Kuroni and the Gifts ...

  5. CF刷题——2500难度的几道题

    1.D. Beautiful numbers 题意:Beautiful Numbers定义为这个数能整除它的所有位上非零整数.问[l,r]之间的Beautiful Numbers的个数. 数位 DP: ...

  6. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

    批量梯度下降(BGD).随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解 </h1><div class="clear"></div> ...

  7. linux ftp随机端口,linuxFTP生产环境配置

    1.ftp采用两个端口控制: A 20端口用于数据传输. B 21端口用于控制,或指建立TCP连接. 2.主动方式连接过程: [注意]:C表示客户端 S表示服务器端 A. S端要开启20.21端口: ...

  8. python random 随机生成一个数

    import random # 0 到 1 之间的随机浮点数 print(random.random()) # 1到20之间随机选取一个整数 print(random.randint(1, 20)) ...

  9. sklearn.model_selection.train_test_split随机划分训练集和测试集

    1 函数用途 train_test_split()是交叉验证中常用的函数,功能是将数组或矩阵按比例随机划分为训练集和测试集,使用方法为: X_train,X_test, y_train, y_test ...

最新文章

  1. 截屏悬浮软件_【第295期】FV悬浮球,一款全能悬浮球
  2. 【MySQL】 日 常 整 理 记 录 分 享
  3. 数据结构与算法 / 平衡二叉树(AVL树)
  4. 【JavaScript】Document对象学习
  5. 【python】【scrapy】使用方法概要(三)
  6. ARP:地址解析协议
  7. C#LeetCode刷题之#21-合并两个有序链表(Merge Two Sorted Lists)
  8. [已解决问题] Could not find class XXX referenced from method XXX.YYY
  9. 磁盘文件排序-编程珠玑
  10. websettings 哪里设置_江阴整站优化哪里好
  11. 基于物品的协同过滤算法实现图书推荐系统
  12. 大数据告诉你,上海二手房到底难不难卖?
  13. ppd文件下载 linux,Linux系统R230,R270,R330,L380打印机驱动下载爱普生喷墨打印机PPD文件...
  14. (十四)单词之各动词讲解
  15. 重置域管理员密码_如何在Server 2008 R2上重置忘记的域管理员密码
  16. photoshop 2019 mac版 可支持最新M1芯片处理器
  17. PyTorch(13)---优化器_随机梯度下降法
  18. 8月22日到26日工作收获
  19. Linux账号与身份管理
  20. 解读 | 计算机视觉已超越人类眼睛?

热门文章

  1. php sorcket_PHP: Sockets - Manual
  2. sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意
  3. [RabbitMQ]队列持久化
  4. [C++11]字符串原始字面量
  5. [召集令]-Dijkstra的单源最短路径算法
  6. 蓝桥杯2015初赛-方程整数解-枚举
  7. Coins POJ - 1742(多重背包+是否装满问题)
  8. java世博会,反应原生失去的世博会
  9. mysql boolean_产品操作MySQL第7篇 – 运算符 – IS NULL
  10. word List44