zoukankan      html  css  js  c++  java
  • 10.4 考试

    T1

    是一道语文题

    随便sort一下就行了

     

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    #define ll long long
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    const ll N=10006;
    const ll mod=((ll)1<<31)-1;
    
    ll n;
    ll a[N],b[N],c[N];
    ll num[N];
    ll con;
    
    void lisan()
    {
        con=0;
        sort(b+1,b+1+n);
        b[0]=-3132;
    
        for(int i=1;i<=n;++i)
            if(b[i]!=b[i-1])
              c[++con]=b[i];
    
        int t1,t2;
        for(int i=1;i<=con;++i)
        {
            t1=(i-1==0?con:i-1);
            t2=(i==con?1:i+1);
            if( (c[t1]+c[i])%mod==c[t2] )
                num[i]=1;
            else
                num[i]=0;
        }
    }
    
    int er(int l,int r,ll vv)
    {
        int mid;
        while(l<=r)
        {
            mid=(l+r)>>1;
            if(c[mid]==vv)
                return mid;
            if(c[mid]<vv)
                l=mid+1;
            else
                r=mid-1;
        }
    }
    
    int main(){
    
        //freopen("T1.in","r",stdin);
    
        int T=0;
    
        while(~scanf("%lld",&n))
        {
            ++T;
            for(int i=1;i<=n;++i)
            {
                scanf("%lld",&a[i]);
                b[i]=a[i];
            }
            //printf("n=%d
    ",n);
            lisan();
            if(con==1)
            {
                printf("Case #%d: -1
    ",T);
                continue;
            }
            int ans=0,temp;
            for(int i=1;i<=n;++i)
            {
                temp=er(1,con,a[i]);
                ans+=num[temp];
            }
            printf("Case #%d: %d
    ",T,ans);
        }
    
    }
    T1

     

     

     

    T2

    根据 f[i]=(f[i]+n-i+1)%i 递推即可

    想法是每次T人后,重新标号,根据这个逆推

     

    #pragma GCC optimize("O3")
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    #define ll long long
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    const int N=10000006;
    
    int T;
    int n;
    
    int main(){
    
        //freopen("T2.in","r",stdin);
    
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            int ans=0;
            for(int i=1;i<=n;++i)
                ans=(ans+n-i+1)%i;
            printf("%d
    ",ans+1);
        }
    /*
    2
    2
    3
    */
    }
    T2

     

     

     

    T3

    首先指数%phi(p),然后phi(p)是合数,用孙子定理

    Lucas求组合数,要预处理阶乘及逆元

     

     

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #define ll long long
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    const int N=1000006;
    const int mod=54184622;
    
    ll mi(ll a,int ci,int mm)
    {
        ll ans=1;
        while(ci)
        {
            if(ci&1)
                ans=ans*a%mm;
            a=a*a%mm;
            ci>>=1;
        }
        return ans%mm;
    }
    
    ll gcd(ll x,ll y){return y==0?x:gcd(y,x%y);}
    
    void egcd(ll a,ll b,ll &x,ll &y)
    {
        if(b==0)
        {
            x=1;y=0;
            return ;
        }
        egcd(b,a%b,x,y);
        ll temp=x;
        x=y;
        y=temp-a/b*y;
    }
    
    int ou(int x)
    {
        int tt=x;
        for(int i=2;i*i<=x;++i)
            if(x%i==0)
            {
                tt=tt-tt/i;
                while(x%i==0)
                    x/=i;
            }
        if(x!=1)
            tt=tt-tt/x;
        return tt;
    }
    
    int n,g;
    ll p[106]={0,2,3,5,7,129011};
    ll a[106];
    ll jie[7][N],jieni[7][N],ni[7][N];
    
    ll cm(int n,int m,int order)
    {
        if(n<m)
            return 0;
        return jie[order][n]*jieni[order][m]%p[order]*jieni[order][n-m]%p[order];
    }
    
    ll Lucas(int n,int m,int order)
    {
        if(m==0)
            return 1;
        return cm(n%p[order],m%p[order],order)*Lucas(n/p[order],m/p[order],order)%p[order];
    }
    
    ll CRT()
    {
        ll Mi,M=1,ans=0,x,y;
        for(int i=1;i<=5;++i)
            M*=p[i];
        //printf("M=%lld
    ",M);
        for(int i=1;i<=5;++i)
        {
            Mi=M/p[i];
            egcd(Mi,p[i],x,y);
            ans=(ans+Mi*x*a[i]%M)%M;
            
        }
        if(ans<0)
            ans+=M;
        return ans;
    }
    
    void chu()
    {
        for(int i=1;i<=5;++i)
        {
            ni[i][1]=1;
            for(int j=2;j<N;++j)
                ni[i][j]=(ll)(p[i]-p[i]/j)*ni[i][p[i]%j]%p[i];
            jieni[i][0]=jie[i][0]=1;
            for(int j=1;j<N;++j)
            {
                jie[i][j]=jie[i][j-1]*j%p[i];
                jieni[i][j]=jieni[i][j-1]*ni[i][j]%p[i];
            }
        }
    }
    
    int main(){
        
        //freopen("in.in","r",stdin);
    
        chu();
    
        scanf("%d%d",&n,&g);
        for(int i=1;i<=n;++i)
        {
            if( gcd(i,n)==1 )
                for(int j=1;j<=5;++j)
                    a[j]=(a[j]+Lucas(g,i,j))%p[j];
        }
    
        printf("%lld",mi(n,CRT(),mod) );
    }
    T3

     

     

    暴露出的问题就是我的数学十分薄弱

     

  • 相关阅读:
    第06组 每周小结 (1/3)
    第06组 Beta冲刺 总结
    第06组 Beta冲刺(5/5)
    爬虫第六次作业
    第06组 Beta冲刺 (4/5)
    第06组 Beta冲刺 (3/5)
    第06组 Beta冲刺 (2/5)
    《机器学习》第二次作业——第四章学习记录和心得
    软工实践个人总结
    第09组 每周小结 (3/3)
  • 原文地址:https://www.cnblogs.com/A-LEAF/p/7629356.html
Copyright © 2011-2022 走看看