zoukankan      html  css  js  c++  java
  • 太平洋赛题解

    题解:

      t1:

        代码:

    #include <cstdio>
    int main(){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        printf("%d",a+b+c);
        return 0;    
    }

    典型的入门问题a+b problem的一点拓展.


    看到fi=a*f_{i-1}+b*f_{i-2}+c*Ci2很容易想到矩阵快速幂:

     巧妙的避开了/2的问题

    当然你无法巧妙的避开搞个逆元也行

    实在不行mod*2到时候再除也行.

    当然这题的精华不在于推矩阵,而在那个拓展,没人ak我们的比赛,所以说拓展题就不提了(如果比赛后有人ak也可以找我要哦).

    代码:

      

    #include <cstdio>
    #include <cstring> 
    const long long mod=19260817;
    long long aa,b,c,js1,js2,n;
    struct JZ{
        long long a[5][5];
        JZ(int s){
            if(s==0){memset(a,0,sizeof(a));}
            if(s==1){
                memset(a,0,sizeof(a));
                a[0][0]=js2;a[1][0]=js1;a[2][0]=3;a[3][0]=3;a[4][0]=1;
            }
            if(s==2){
                memset(a,0,sizeof(a));
                a[0][0]=aa;a[0][1]=b;a[0][2]=c;a[1][0]=1;a[2][2]=1;a[2][3]=1;a[3][3]=1;a[3][4]=1;a[4][4]=1;
            }
        }
        friend JZ operator * (JZ a,JZ b){
            JZ c(0);
            for(int i=0;i<=4;i++) for(int j=0;j<=4;j++) for(int k=0;k<=4;k++){c.a[i][j]+=b.a[i][k]*a.a[k][j];c.a[i][j]%=mod;}
            return c;
        }
    };
    void cl(){
        int t;
        scanf("%d",&t);
        for(int i=1;i<=t;i++){
            scanf("%lld%lld%lld%lld%lld%lld",&aa,&b,&c,&js1,&js2,&n);
            aa%=mod;b%=mod;c%=mod;js1%=mod;js2%=mod;n-=2;JZ an(1);JZ s(2);
            while(n){if(n&1) an=an*s;n>>=1;s=s*s;}
            printf("%d
    ",an.a[0][0]);
        }
    }
    int main(){cl();return 0;}

      t2:

      首先我们要先看一下这些数字有什么性质(p^0,p^1,p^2...)

      很容易发现他们%(p+1)只能得到1和p,证明:

      p^0%(p+1)=1

           p^1%(p+1)=p

      p^2%(p+1)=(p+1-1)^2%(p+1)=1

      p^(奇数)%(p+1)=(p^2)^n*p^1=p

      p^(偶数)%(p+1)=(p^2)^n=1

      于是我们这样考虑,假设n<=p,等于p的话先手就一定获胜(直接拿p个走人)n<p的话那么只能一个一个p%2=1则先手胜否则后手胜

      如果n>p,如果n%(p+1)的结果为先手赢,于是先手就会先"搞一局",然后无论后手怎么拿,这要他凑一下mod(p+1)为0就行了(mod只有p和1,能配成),于是先手胜

      如果n%(p+1)为后手胜的情况,后手只要配p+1的整数倍最后把先手搞一下就行了

      然后由于n比较大,边读边去mod就行了

      代码:

      

    #include <cstdio>
    void cl(){
        int t;
        scanf("%d",&t);
        for(int jsjs=1;jsjs<=t;jsjs++){
            long long p,q;
            scanf("%lld%lld",&p,&q);
            p++;
            long long ha=0;
            char ch=getchar();
            for(;;){
                ch=getchar();
                if(ch<'0'||ch>'9') break;
                ha=(ha*10+ch-'0')%(long long)p;
            }
            if(ha==p-1||ha%2) printf("lsx
    ");
            else printf("gjk
    ");
        }
    }
    int main(){cl();return 0;}
  • 相关阅读:
    Sprint第二个冲刺(第八天)
    Sprint第二个冲刺(第七天)
    Sprint第二个冲刺(第六天)
    Sprint第二个冲刺(第五天)
    Sprint第二个冲刺(第四天)
    Sprint第二个冲刺(第三天)
    Sprint第二个冲刺(第二天)
    Sprint第二个冲刺(第一天)
    新冲刺Sprint3(第三天)
    新冲刺Sprint3(第二天)
  • 原文地址:https://www.cnblogs.com/wish-all-ac/p/12994100.html
Copyright © 2011-2022 走看看