zoukankan      html  css  js  c++  java
  • 中国(北方)大学生程序设计训练赛(第一周) (D E)

    比赛链接

    D题是个二分,每次check复杂度为O(n),类似于xdu_1068,只是一个是求积,一个是求商

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef long double LF;
     
    const LF eps=1e-8;
    int a[100005],bb[100005];
    LF b[100005];
    LL A,B;
    LL K;
    LL rankof(LF x)
    {
        LL ans = 0,now = B;
        for(int i = 1; i <= A; i++)
        {
            while(now)
            {
                if(a[i]*b[now] > x) now--;
                else    break;
            }
            ans += now;
        }
        return A*B-ans;
    }
     
    void print()
    {
        puts("========");
        for(int i=1; i<=A; i++)
            printf("%d ",a[i]);
        puts("========");
        for(int i=1; i<=B; i++)
            printf("%.2Lf ",b[i]);
        puts("========");
    }
     
     
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%lld%lld%lld",&A,&B,&K);
            K--;
            for(int i=1; i<=A; i++)
                scanf("%d",&a[i]);
            for(int i=1; i<=B; i++)
                scanf("%d",&bb[i]),b[i]=(LF)1.0/bb[i];
            sort(a+1,a+A+1);
            sort(b+1,b+B+1);
    //      print();
            LF l=a[1]*b[1],r=a[A]*b[B]+1,mid;
            while(r-l>eps)
            {
                mid=(l+r)/2;
                if(rankof(mid)<=K) r=mid;
                else l=mid;
            }
            printf("%.2Lf
    ",l);
        }
    }
    D

    E题是矩阵快速幂,注意sin函数有周期性

    //话说这题模板没准备好,调了半天。。。(-。-;)

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    typedef long long LL;
    //////////////////////////////
    LL T,n,f1,f2,ans;
    ///////////////////////////////
    const long long N=6;
    const long long mod=1000000007;
     
     
    struct Mat
    {
        long long mat[N][N];
    };
     
    Mat Mut(Mat a,Mat b)
    {
        long long i,j,k;
        Mat c;
        memset(c.mat,0,sizeof(c.mat));
        for(k=0; k<N; k++)
        {
            for(i=0; i<N; i++)
            {
                if(a.mat[i][k])
                    for(j=0; j<N; j++)
                    {
                        if(b.mat[k][j])
                            c.mat[i][j]=c.mat[i][j]+a.mat[i][k]*b.mat[k][j]%mod;
                        c.mat[i][j]=c.mat[i][j]%mod;
                    }
            }
        }
        return c;
    }
     
    Mat Pow(Mat a,long long n)
    {
        long long i,j;
        Mat c;
        for(i = 0; i < N; ++i)
            for(j = 0; j < N; ++j)
                c.mat[i][j] = (i == j);
        for(; n; n>>=1)
        {
            if(n&1)  c=Mut(c,a);
            a=Mut(a,a);
        }
        return c;
    }
     
    LL f(Mat A,long long n)
    {
        Mat A_;
        A_=Pow(A,n);
        LL ret=0;
        ret=(ret+A_.mat[1][0]*f2)%mod;
        ret=(ret+A_.mat[1][1]*f1)%mod;
        ret=(ret+A_.mat[1][2]*0)%mod;
        ret=(ret+A_.mat[1][3]*1)%mod;
        ret=(ret+A_.mat[1][4]*0)%mod;
        ret=(ret+A_.mat[1][5]*(-1))%mod;
        return (ret+mod)%mod;
    }
     
    //=============================
    Mat A;
     
    int main()
    {
        memset(A.mat,0,sizeof(A.mat));
        A.mat[0][0]=1;A.mat[0][1]=1;A.mat[0][2]=1;
        A.mat[1][0]=1;
                      A.mat[1][1]=0;
                                                                        A.mat[2][5]=1;
                                    A.mat[3][2]=1;
                                                A.mat[4][3]=1;
                                                            A.mat[5][4]=1;
        while(cin>>f1>>f2>>n)
        {
    //      for(int n=1; n<15; n++)
    //      {
                if(n==1)
                {
                    cout<<f1<<endl;
                    continue;
                }
                if(n==2)
                {
                    cout<<f2<<endl;
                    continue;
                }
                ans=f(A,n-1);
                cout<<ans<<endl;
    //      }
        }
    }
    E

    //3.6下午5点更新

    整理了下模板后的E题代码  

    //p。s。 刚听队友提到矩阵可以用4*4的,感觉自己6*6蠢了些。。

    //p。s。 修改时只需要修改列向量b和矩阵A的初始化即可

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    typedef long long LL;
    
    LL n,ans;
    const int N=6;
    const LL mod=1e9+7;
    LL b[]= {0,0,0,1,0,-1};
    
    struct Mat
    {
        LL mat[N][N];
    } A;
    Mat Mut(Mat a,Mat b)
    {
        Mat c;
        memset(c.mat,0,sizeof(c.mat));
        for(int k=0; k<N; k++)
            for(int i=0; i<N; i++)
                for(int j=0; j<N; j++)
                {
                    c.mat[i][j]+=a.mat[i][k]*b.mat[k][j]%mod;
                    c.mat[i][j]=c.mat[i][j]%mod;
                }
        return c;
    }
    Mat Qpow(Mat a,LL n)
    {
        Mat c;
        for(int i=0; i<N; ++i)
            for(int j=0; j<N; ++j)
                c.mat[i][j]=(i==j);
        for(; n; n>>=1)
        {
            if(n&1) c=Mut(c,a);
            a=Mut(a,a);
        }
        return c;
    }
    LL cal(Mat A,LL n,LL b[])
    {
        Mat A_=Qpow(A,n-1);
        LL ret=0;
        for(int i=0; i<N; i++)
        {
            ret+=A_.mat[1][i]*b[i];
            ret%=mod;
        }
        return (ret+mod)%mod;
    }
    void init_A()
    {
        memset(A.mat,0,sizeof(A.mat));
        A.mat[0][0]=1,A.mat[0][1]=1,A.mat[0][2]=1;
        A.mat[1][0]=1;
        A.mat[2][5]=1;
        A.mat[3][2]=1;
        A.mat[4][3]=1;
        A.mat[5][4]=1;
    }
    int main()
    {
        init_A();
        while(cin>>b[1]>>b[0]>>n)    //b[1]即f1,b[0]即f2 
        {
            ans=cal(A,n,b);
            cout<<ans<<endl;
        }
    }
    E——plus
  • 相关阅读:
    Redis数据类型有哪些?
    python---判断元素是否可用 is_displayed/is_enabled/is_selected
    pythone---获取文本链接,text/get_attribute/current_url/title
    python---清空 clear
    python---获取元素 CSS
    JDK安装及配hi环境
    python---获取元素 Xpath
    python---获取元素 id/name/class_name/link_text/partial选择器及注意事项
    python---数据类型----set集合和字典
    web搭建自动化环境
  • 原文地址:https://www.cnblogs.com/Just--Do--It/p/6506005.html
Copyright © 2011-2022 走看看