“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛

A-hzy 和zsl 的生存挑战

题解:最优策略是A猜B的时候与自己数相同,B猜A的时候与自己数相反。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int main()
{
    int i;
    for(i=1;i<=4;i++)
        printf("1.00
");
    return 0;
}
View Code

B-人类史上最大最好的希望事件

题解:预处理斐波那契数列暴力求解即可。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define mod 192600817
using namespace std;

int q,lim,last;
int n[10005][2];
long long f[100005],sum[100005];
int main()
{
    int i,a,b,c,d;
    while(~scanf("%d",&q))
    {
        for(i=1;i<=q;i++)
        {
            scanf("%d%d%d%d",&a,&b,&c,&d);
            n[i][0]=a*4+b+1;
            n[i][1]=c*4+d+1;
            if(n[i][0]>n[i][1]) swap(n[i][0],n[i][1]);
            lim=max(n[i][1],lim);
        }
        f[1]=1;f[2]=1;
        for(i=max(3,last);i<=lim;i++)
            f[i]=(f[i-1]+f[i-2])%mod;
        for(i=max(1,last);i<=lim;i++)
            sum[i]=(sum[i-1]+f[i]*f[i])%mod;
        for(i=1;i<=q;i++)
            printf("%lld
",(sum[n[i][1]]-sum[n[i][0]-1]+mod)%mod);
        last=lim;
    }
    return 0;
}
View Code

C-超级无敌简单题

题解:对于非鸽子数,发现循环节里的第一个数都是4,其余暴力判断即可。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int q,tot,limk;
bool v[2500005];
int f[1500005],k[100005];
int solve(int  x)
{
    int ret,tmp;
    ret=0LL;
    while(x)
    {
        tmp=x%10;
        x/=10;
        ret+=(tmp*tmp);
    }
    return ret;
}

bool pd(long long x)
{
    while(x!=1&&x!=4)
    {
        if(v[x]) return true;
        x=solve(x);
    }
    return x==1;
}
int main()
{
    int i;
    v[1]=true;
    f[tot=1]=1;    
    scanf("%d",&q);
    for(i=1;i<=q;i++)
        scanf("%d",&k[i]);
    limk=k[1];
    for(i=2;i<=q;i++)
        limk=max(limk,k[i]);
    for(i=2;i<=1200000;i++)
        if(pd(i))
        {
            v[i]=true;
            f[++tot]=i;
            if(tot==limk) break;
        }
    for(i=1;i<=q;i++)
        printf("%d
",f[k[i]]);
    return 0;
}
View Code

G-简单数学题

题解:$i imes binom{n}{i}=n imes binom{n-1}{i-1}$,之后就是差比数列求和了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define mod 1000000007
using namespace std;
long long n;
long long quick_pow(long long a,long long b)
{
    long long ret=1,base=a;
    while(b)
    {
        if(b&1) ret=ret*base%mod;
        base=(base*base)%mod;
        b>>=1;
    }
    return ret;
}
long long solve()
{
    long long ans;
    ans=((n-1)%mod*quick_pow(2,n)%mod+1)%mod;
    return ans;
}
int main()
{
    while(~scanf("%lld",&n))
        printf("%lld
",solve());
    return 0;
}
View Code

H-zyb的面试

题解:模拟一个十叉树,乱搞即可。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int t,n,k;
int solve(int n, int k) 
{
    int cur,step,l,r;
    cur=1;k--;
    while(k>0) 
    {
        step=0,l=cur,r=cur+1;
        while(l<=n) 
        {
            step+=min(n+1,r)-l;
            l*=10;
            r*=10;
        }
        if(step<=k) cur++,k-=step;
        else cur*=10,k--;
    }
    return cur;
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&k);
        printf("%d
",solve(n,k));    
    }
    return 0;
}
View Code

J-Count

题解:矩阵快速幂

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define mod 123456789
using namespace std;
int t;
long long n;
struct matrix
{
    int n,m;
    long long a[10][10];
}m1,m2;
matrix mul(matrix a,matrix b)
{
    int i,j,k;
    matrix c;
    c.m=a.m;
    c.n=a.n;
    memset(c.a,0,sizeof(c.a));
    for(i=1;i<=c.n;i++)
        for(j=1;j<=c.m;j++)
            for(k=1;k<=c.n;k++)
                c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod;
    return c;
}
matrix qpow(matrix a,long long k)
{
    int i,j;
    matrix c;
    c.m=a.m;
    c.n=a.n;
    for(i=1;i<=min(c.n,c.m);i++)
        c.a[i][i]=1;
    for(i=1;i<=c.n;i++)
        for(j=1;j<=c.m;j++)
            if(i!=j) c.a[i][j]=0;
    while(k)
    {
        if(k&1) c=mul(a,c);
        a=mul(a,a);
        k>>=1;
    }
    return c;
}
long long solve(long long n)
{
    matrix tmp;
    tmp=qpow(m1,n-2);
    tmp=mul(tmp,m2);
    return tmp.a[1][1];
}
int main()
{
    int i,j;
    m1.n=6;m1.m=6;
    m1.a[1][1]=m1.a[1][3]=m1.a[2][1]=m1.a[3][3]=m1.a[3][6]=1;
    m1.a[4][4]=m1.a[4][6]=m1.a[5][5]=m1.a[5][6]=m1.a[6][6]=1;
    m1.a[1][2]=m1.a[4][5]=2;
    m1.a[3][4]=m1.a[3][5]=3;
    
    m2.n=6;m2.m=1;
    m2.a[1][1]=2;
    m2.a[2][1]=1;
    m2.a[3][1]=27;
    m2.a[4][1]=9;
    m2.a[5][1]=3;
    m2.a[6][1]=1;
            
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld",&n);
        printf("%lld
",solve(n));
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/yljiang/p/10551222.html