[骗分技巧——随机化Ⅰ]CodeChef-Milestones,CF364D-Ghd
文章目录
- CodeChef-Milestones
- problem
- solution
- code
- CF364D-Ghd
- problem
- solution
- code
设随机化一次的正确率为 ppp,一次的复杂度为 O(f(n))O(f(n))O(f(n))。则随机的期望次数 kkk:
k=∑i=1∞p(1−p)i−1i(1)(1−p)k=∑i=1∞p(1−p)ii=∑i=2∞p(1−p)i−1(i−1)(2)(1)−(2)⇒p⋅k=p+∑i=2∞p(1−p)i−1⇒k=1+∑i=2∞(1−p)i−1=∑i=0∞(1−p)ik=\sum_{i=1}^∞p(1-p)^{i-1}i\quad\quad\quad(1)\\\\ (1-p)k=\sum_{i=1}^∞p(1-p)^ii=\sum_{i=2}^∞p(1-p)^{i-1}(i-1)\quad (2)\\\\ (1)-(2)\Rightarrow p·k=p+\sum_{i=2}^∞p(1-p)^{i-1}\Rightarrow k=1+\sum_{i=2}^∞(1-p)^{i-1}=\sum_{i=0}^∞(1-p)^i k=i=1∑∞p(1−p)i−1i(1)(1−p)k=i=1∑∞p(1−p)ii=i=2∑∞p(1−p)i−1(i−1)(2)(1)−(2)⇒p⋅k=p+i=2∑∞p(1−p)i−1⇒k=1+i=2∑∞(1−p)i−1=i=0∑∞(1−p)i
由等比公式得: k=∑i=0∞(1−p)i=1−(1−p)∞1−(1−p)=1pk=\sum_{i=0}^∞(1-p)^i=\frac{1-(1-p)^∞}{1-(1-p)}=\frac{1}{p}k=∑i=0∞(1−p)i=1−(1−p)1−(1−p)∞=p1。
综上随机算法求解的期望复杂度为 O(p−1f(n))O(p^{-1}f(n))O(p−1f(n))。
CodeChef-Milestones
problem
题目链接
solution
因为最多只有七条直线就可以覆盖所有点,可以推出 覆盖点最多的直线至少覆盖 ⌈n7⌉\lceil\frac n7\rceil⌈7n⌉ 个点。
也就是说,两个点属于同一直线的概率为 17\frac{1}{7}71。
期望来说,777 次随机化点就可以通过了,但是保险起见,可以运行 100010001000 次。
时间复杂度 O(Tnk)O(Tnk)O(Tnk),超了但是跑得很快》》o_o …
code
#include <bits/stdc++.h>
using namespace std;
#define maxn 10005
int T, n;
double x[maxn], y[maxn];int main() {scanf( "%d", &T );while( T -- ) {scanf( "%d", &n );for( int i = 1;i <= n;i ++ ) scanf( "%lf %lf", &x[i], &y[i] );mt19937 wwl(time(0));uniform_int_distribution < int > range( 1, n );int ans = 0;for( int t = 1;t <= 1000;t ++ ) {int a = range( wwl ), b = range( wwl );int cnt = 0;if( x[a] == x[b] ) {for( int i = 1;i <= n;i ++ )if( x[i] == x[a] ) cnt ++;}else {cnt = 1;double k = ( y[a] - y[b] ) / ( x[a] - x[b] );for( int i = 1;i <= n;i ++ )if( x[i] != x[a] and ( y[i] - y[a] ) / ( x[i] - x[a] ) == k ) cnt ++;}ans = max( ans, cnt );}printf( "%d\n", ans );}return 0;
}
CF364D-Ghd
problem
题目链接
solution
贪心地,∣S′∣|S'|∣S′∣ 选出的子集大小应该恰好为 ⌈n2⌉\lceil\frac{n}{2}\rceil⌈2n⌉,因为选择的数越多,gcd\gcdgcd 只会受到更多限制变小而不会变大。
那么每个数都是 12\frac 1 221 的概率会属于最后答案子集。
随机化 101010 次,正确率 1−(1−12)101-(1-\frac 1 2)^{10}1−(1−21)10 已经很优秀了。
随机化出一个数 axa_xax 假设其属于最后答案子集。
先求出 axa_xax 的所有因子数,最后的答案肯定是 axa_xax 的因子。用桶 cntpcnt_pcntp 记录下来。
再求出与 aia_iai 的 gcd\gcdgcd,枚举 gcd\gcdgcd 的因子数,找到因子所在的桶,cntp++cnt_p++cntp++。
最后进行桶的合并,如果桶 ppp 代表的因子是桶 qqq 代表的因子倍数,则有 cntq+=cntpcnt_q+=cnt_pcntq+=cntp。
1e121e121e12 内因子数最多的不超过 680068006800 个。
单次时间复杂度,假设 δ(n)\delta(n)δ(n) 为 nnn 的因子个数,O(ax+δ(n)2+nlogn)O(\sqrt{a_x}+\delta(n)^2+n\log n)O(ax+δ(n)2+nlogn)。
code
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 1000005
int n, ans, tot;
int a[maxn], d[maxn], cnt[maxn];int gcd( int x, int y ) {if( ! y ) return x;else return gcd( y, x % y );
}void divide( int x ) {tot = 0;for( int i = 1;i * i <= x;i ++ )if( x % i == 0 ) {d[++ tot] = i;if( i * i != x ) d[++ tot] = x / i;}sort( d + 1, d + tot + 1 );
}void solve( int x ) {divide( x );for( int i = 1;i <= tot;i ++ ) cnt[i] = 0;for( int i = 1;i <= n;i ++ ) {int g = gcd( x, a[i] );int pos = lower_bound( d + 1, d + tot + 1, g ) - d;cnt[pos] ++;}for( int i = 1;i <= tot;i ++ )for( int j = i + 1;j <= tot;j ++ )if( d[j] % d[i] == 0 ) cnt[i] += cnt[j];for( int i = tot;i;i -- ) {if( d[i] <= ans ) break;if( cnt[i] >= ( n + 1 >> 1 ) ) ans = max( ans, d[i] );}
}signed main() {scanf( "%lld", &n );for( int i = 1;i <= n;i ++ ) scanf( "%lld", &a[i] );mt19937 wwl(time(0));uniform_int_distribution < int > range( 1, n );for( int t = 1;t <= 10;t ++ ) {int x = range( wwl );solve( a[x] );}printf( "%lld\n", ans );return 0;
}
[骗分技巧——随机化Ⅰ]CodeChef-Milestones,CF364D-Ghd相关推荐
- [骗分技巧——随机化Ⅱ] [Poi2014]Couriers,CodeChef - TKCONVEX
文章目录 [Poi2014]Couriers problem solution code CodeChef - TKCONVEX problem solution code 随机算法的典型套路:枚举太 ...
- 新版骗分导论 - 第7 版
新版骗分导论第7版\quad\tiny\texttt{第 7 版}第 7 版 修订--Jerrycyx(CSDN,洛谷) 洛谷博客查看 前言 这是我在倒腾洛谷水贴时偶然翻到的一篇博客,自认为写得很好, ...
- 大神cyd的骗分导论
新 版 骗 分 导 论 THE NEW GUIDE OF CHEATING IN INFORMATICS OLYMPIAD 蒟 蒻 的 宝 书 目录 第1章 绪论 第2章 从无解出发 2.1 无解情况 ...
- 新 版 骗 分 导 论
新 版 骗 分 导 论{蒟 蒻 的 宝 书} {目 录} 第1章 绪论 第2章 从无解出发 ↪ 2.1 无解情况 ↪ 2.2 样例--白送的分数 第3章 "艰苦朴素永不忘" ↪ 3 ...
- 新版骗分导论(最少骗到省级三等奖)
第1章 绪论 在Oier中,有一句话广为流传: t{任何蒟蒻必须经过大量的刷题练习才能成为大牛乃至于神牛}任何蒟蒻必须经过大量的刷题练习才能成为大牛乃至于神牛≺ 这就是著名的lzn定理.然而,我们这些 ...
- 骗分导论-第8修订测试版
参考:<骗分导论-第7修订测试版><骗分导论-第6修订测试版><骗分导论-第5修订测试版><骗分导论-第4修订测试版><骗分导论-第3修订测试版& ...
- C++考试题目骗分秘籍
应用在什么情况(前言) 如果考试时间只有15分钟了,你还有3道题没写,或者是实在不会做,那该怎么办??? 答案只有三条: 1.放弃 2.骗分 3.拼命想出来 显然只有2,3可选,所以还剩好多时间的话( ...
- “ 骗 ”分指南——对于蓝桥你不得不知的应试技巧(文末发送礼包)
文章目录 前言 合理使用考试外的电脑工具--简称外挂 计算器 excel 常用的代码模板 辗转相除法求最大公约数 闰年 素数 排序--sort 函数库 暴力 万能钥匙--DFS 打表 最后 前言 蓝桥 ...
- CV入门赛最全思路上分技巧汇总!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:安晟,算法工程师,Datawhale成员 赛题数据及背景 http ...
最新文章
- 关于PCA算法的一点学习总结
- 一不小心,删错了,还把回收站清空了,咋办啊?
- 浅读:ITSM信息技术服务管理
- 响应式网页布局 - W3Schools How-Tos 01
- centos7重新加载服务的命令_CentOS7 从查看、启动、停止服务说起systemctl
- webpack+es6+node+react初实践及总结
- 生产企业如何部署VMware虚拟化的解决方案
- 《江南》、乌镇、《似水年华》
- Sping : @InitBinder注解
- PHP开发中涉及到emoji表情的几种处理方法
- Java 重写(Override)与重载(Overload)区别
- 口才训练方法——速读法、背诵法
- ​Windows下RSA密钥生成工具openssl​
- C#面向对象封装继承多态
- obs 推流编码在哪设置_直播工具OBS推流配置操作指引
- android 版本选择,谷歌服务框架版本如何选择 我该下载哪个版本解析
- BATH四巨头鼎立,中国云市场将走向何方?
- Java快排两种写法
- pdf如何在线旋转?PDF旋转的方法
- 《联盟》读书笔记(三):如何协调员工与公司的目标和价值观
热门文章
- 数学告诉你家庭关系的奥秘
- 2020下半年新机最新消息_提前剧透 2020 年下半年五大新机
- java执行更新sql_sql server执行更新需要更多时间
- java 判断进程状态_获取远程服务器上 Java 进程的运行状态
- html图片宽度高度等比例绽放,css图片自动绽放大小,左右,上下居中
- 5gh掌上云计算认证不通过_【众志成城战疫情】法官助理告诉你“移动微法院”、“掌上法庭”有多便捷、有多硬核~!...
- linux 往文件写4k大小,[svc]为何linux ext4文件系统目录默认大小是4k?
- tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件
- 数据科学与python语言——Matplotlib数据可视化基础
- 算法设计与分析——递归与分治策略——循环日程赛