zoukankan      html  css  js  c++  java
  • BZOJ 2277 Poi2011 Strongbox

    题目大意:一个集合A,包含了0~n-1这n个数。另有一个集合B,满足:

          1.B是A的子集。

          2.如果a、b均在B中,则(a+b)%n也在B中(a=b亦可)

        给出k个数ai,前k-1个不在B中,第k个在B中,问B最大有几个元素。

    数据范围:1<=k<=250000,k<=n<=1e14;

    (以下x,y均代表互不相关的整数)

    考虑集合B。

    假设B中有一元素v。则方程 v*x-n*y=c(即v*x与c对n同余)当且仅当gcd(v,n)|c 时有正整数解x,y。

    那么显然c=gcd(v,n)时方程有正整数解x,y。则v∈B->gcd(v,n)∈B……①

    又因为方程 v*x+u*y=gcd(u,v)必有整数解x、y,所以根据B的特点2可得 u,v∈B->gcd(u,v)∈B……②

    根据题意,(gcd(v,n)*x)%n也必在B中……③

    由①、②,设B中所有数的最大公约数与n的最大公约数为g,则g必在B内且为B中最小正整数,又根据③,g,2*g,3*g,4*g……均在B中。有因为g是所有元素的最大公约数,所以B中不会再有别的元素。

    以上,我们只要求出满足条件的最小g即可。g的限制条件如下:ai%g!=0,gcd(n,ak)%g==0。

    最自然的想法是O(sqrt(gcd(n,ak)))枚举g再对于每个g进行O(k)检验,显然会T。然后……我就不会做了……

    根据机智的题解,到这一步我们有以下两种做法:

    一、

    对于1<=n<=1e14,n最多有17280个因子,那么我们发现g最多有17280个。将所有gcd(n,ai)去重后,个数也会降到17280以下。这样效率就基本OK了。

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const int sz=25e4+5;
     5 ll k,a[sz],n,q;
     6 int l,len;
     7 ll gcd(ll a,ll b){
     8     return b?gcd(b,a%b):a;
     9 }
    10 bool ck(ll v){
    11     for(int i=1;i<=l;i++)
    12         if(a[i]%v==0)return 0;
    13     return 1;
    14 }
    15 int main(){
    16     scanf("%lld%lld",&n,&k);
    17     for(int i=1;i<=k;i++){
    18         scanf("%lld",&a[i]);
    19         a[i]=gcd(a[i],n);
    20     }
    21     sort(a+1,a+k);
    22     for(int i=1;i<k;i++)
    23         if(a[i]!=a[i-1])a[++l]=a[i];
    24     for(ll j=1;j*j<=a[k];j++)if(a[k]%j==0){
    25         if(ck(j)){
    26             printf("%lld",n/j);
    27             return 0;
    28         }
    29         if(ck(a[k]/j))q=a[k]/j;
    30     }
    31     printf("%lld",n/q);
    32     return 0;
    33 }

    二、

    在某数学一本通上看到的,但是它的代码和说明蒟蒻我都没看懂,感兴趣的大佬可以看看这篇,貌似和某数学一本通一模一样,看懂的大佬好心的话来教教我。

    日常写错……欢迎指正 QQ:2960005671 邮箱:bleavescoder@163.com
  • 相关阅读:
    五十四:CSS3之背景与渐变之渐变
    五十三:CSS3之背景与渐变之背景
    五十二:CSS3之圆角、边框、边界图片
    五十一:CSS3之基本选择器之伪元素
    五十:CSS3之基本选择器之CSS权重
    四十九:CSS3之基本选择器之伪类选择器之结构类之nth选择器
    四十八:CSS3之基本选择器之伪类选择器之UI元素状态伪类
    四十七:CSS3之基本选择器之伪类选择器之动态伪类
    四十六:CSS3之基本选择器新增加的属性选择器
    四十五:CSS3之基本选择器新增加的4种选择器
  • 原文地址:https://www.cnblogs.com/BLeaves/p/8639190.html
Copyright © 2011-2022 走看看