bzoj 3837 pa2013 Filary
先搞第一问.考虑简单情况,如果\(m=2\),那么一定有个剩余类大小\(\ge \lceil\frac{n}{2}\rceil\),同时这也是答案下界
然后我们每次随机选出一个数\(a_i\),然后钦定它在我们要的剩余类里,现在再枚举其他数,看一下最多有多少个数\(a_j\)可以和他模\(m\)同余,也就是选最多的数满足\(\gcd(|a_i-a_{j_1}|,|a_i-a_{j_2}|,|a_i-a_{j_3}|...)>1\).那对于每个\(j\),把所有\(|a_i-a_j|\)的质因子位置全\(+1\)--因为\(m\)取质数显然比取合数优.最后\(cnt_p\)的最大值即为第一问答案
第二问的话,因为是\(\gcd(...)>1\),那我们对于每个质数位置维护\(|a_i-a_j|\)为它倍数的\(\gcd(|a_i-a_j|...)\),这样第二问答案就是第一问最大的位置上最大的这个\(\gcd\)
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double
using namespace std;
const int N=1e5+10,M=N*100;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,a[N],prm[N*10],tt,pp[M],a1,a2,c1[M],c2[M];
int main()
{
for(int i=2;i<=10000000;++i)
{
if(!pp[i]) pp[i]=i,prm[++tt]=i;
for(int j=1;i*prm[j]<=10000000;++j)
{
pp[i*prm[j]]=prm[j];
if(i%prm[j]==0) break;
}
}
n=rd();
for(int i=1;i<=n;++i) a[i]=rd();
int Q=10;
while(Q--)
{
int ii=rand()%n+1,bs=0;
for(int i=1;i<=n;++i)
{
if(a[i]==a[ii]){++bs;continue;}
int x=abs(a[i]-a[ii]),xx=x,las=0;
while(x>1)
{
if(pp[x]!=las)
++c1[pp[x]],c2[pp[x]]=__gcd(xx,c2[pp[x]]);
las=pp[x],x/=pp[x];
}
}
for(int i=1;i<=n;++i)
{
if(a[ii]==a[i]) continue;
int x=abs(a[i]-a[ii]);
while(x>1)
{
if(c1[pp[x]]+bs>a1||(c1[pp[x]]+bs==a1&&c2[pp[x]]>a2))
a1=c1[pp[x]]+bs,a2=c2[pp[x]];
c1[pp[x]]=c2[pp[x]]=0;
x/=pp[x];
}
}
}
printf("%d %d\n",a1,a2);
return 0;
}
bzoj 3837 pa2013 Filary的更多相关文章
- bzoj 3837 (随机过题法了解一下)
3837: [Pa2013]Filary Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 395 Solved: 74[Submit][Status] ...
- 【BZOJ3837】[Pa2013]Filary 随机化神题
[BZOJ3837][Pa2013]Filary Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时 ...
- 【BZOJ3837】[PA2013]Filary
[BZOJ3837][PA2013]Filary 题面 darkbzoj 题解 考虑到模数为\(2\)时答案至少为\(\frac n2\),这是我们答案的下界. 那么我们对于任意的一个数,它们答案集合 ...
- BZOJ 3736: [Pa2013]Karty
Description 一个0/1矩阵,求能覆盖所有 \(1\) ,同时不覆盖所有 \(0\) 的矩阵,使这个面积最大. Sol DP/悬线法. 首先,所求的矩阵一定可以覆盖所有贴边的悬线. 用悬线法 ...
- BZOJ3837 : [Pa2013]Filary
当m取2时,k至少为$\frac{n}{2}$ 所以在最优解中每个数被选中的概率至少为$\frac{1}{2}$ 每次随机选取一个位置i,计算出其它数与$a_i$的差值,将差值分解质因数 所有质因数中 ...
- [BZOJ]3737 [Pa2013]Euler
从这个FB开始写博客啦. 也不知道会坚持多久…… = =似乎要加一句转载请注明出处 http://www.cnblogs.com/DancingOnTheTree/p/4026076.html htt ...
- Bzoj3837 [Pa2013]Filary(随机化)
题面 权限题 题解 这题有一个很好的性质,就是一定有$k>\frac n2$.接着考虑怎么做. 我们随机选取一个数$x$,然后将所有数与它作差,那么只需要找出$k$个差值使得他们的最大公因数大于 ...
- BZOJ 3733 [Pa2013]Iloczyn 模拟爆搜
Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k& ...
- bzoj 3733: [Pa2013]Iloczyn【dfs】
参考:http://www.cnblogs.com/clrs97/p/5125976.html 瞎搞约数失败...滚去搜索 dfs(x,y,z) 表示当前可选第x到第m个约数,还要选y个约数,已有z的 ...
随机推荐
- jmeter也能做Webservice接口测试
百度到天气预报接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 新增RPC接口线程 调取的参数及调取天气结果的显示 ...
- 类 kotlin(13)
Kotlin 中使用关键字 class 声明类class Invoice {} 类声明由类名.类头(指定其类型参数.主 构造函数等) 和由大括号包围的类体构成.类头和类体都是可选的:如果一个类没有类体 ...
- Fiddler抓包原理和使用详解
iddler抓包工具在APP开发过程中使用非常频繁,对开发者理解HTTP网络传输原理以及分析定位网络方面的问题非常有帮助.今天抽点时间出来总结一下Fiddler在实际开发过程中的应用. 我开发过程中使 ...
- Orcal nvl函数
NVL(E1, E2)的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身.但此函数有一定局限,所以就有了NVL2函数. 拓展:NVL2函数:Oracle/PLSQL中的一个函数,Oracl ...
- is幻梦 Linux命令之文件和目录操作命令(二)——查看文件内容cat、more、less、tail、head
一.cat命令 用法:cat [选项][文件] 1.主要用来查看文件内容 2.-n 在文件内容的每一行上加上行号 3.再不加任何选项和文件名的时候,将标准输入的内容复制到标准输出 这个时候一般用于重定 ...
- Maven 默认 SpringMVC-servlet.xml 基本配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Ironic 裸金属管理服务的底层技术支撑
目录 文章目录 目录 底层技术支撑 DHCP NBP TFTP IPMI PXE & iPXE Cloud Init Linux 操作系统启动引导过程 底层技术支撑 PXE:预启动执行环境,支 ...
- Servlet 表单数据 接收get post 参数实例
Servlet 表单数据 很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. GE ...
- (4)rapidxml的详解及使用
RapidXml是指 XML DOM解析工具包,是一个快速的读写xml文件的库文件(hpp). (1)创建XML文件 #include <iostream> #includ ...
- TYPES与DATA区别
例如:int a; "c语言定义 TYPES:BEGIN OF typ, filed1 TYPE c, END OF typ. "相当于int类型 DAT ...