• 2013 腾讯马拉松初赛 第1场


    1. 简单模拟题

    2. 快速幂,加上一点数组的处理。。  其实也是很简单的,但是我交了好几次才过...

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    
    typedef __int64 LL;
    #define MOD 1000000007
    int n,t,k;
    
    LL g[100100];
    
    LL fuc()
    {
        if(t==0) return 1;
        LL sum=k;
        LL s=1;
        while(t!=1)
        {
            if(t%2==0)
            {
                sum=(sum*sum)%MOD;
                t/=2;
            }
            else
            {
                s=(s*sum)%MOD;
                sum=(sum*sum)%MOD;
                t/=2;
            }
        }
        sum=(sum*s)%MOD;
        return sum;
    }
    LL save[100100];
    
    int main()
    {
        int t1;
        scanf("%d",&t1);
        while(t1--)
        {
            scanf("%d%d%d",&n,&t,&k);
            for(int i=1;i<=n;i++)
                scanf("%I64d",&g[i]);
            int tt=t%n;
            LL key=fuc();
            int cnt=0;
            for(int i=n-tt+1;i<=n;i++)
            {
                save[cnt++]=((LL)g[i]*key)%MOD;
            }
            for(int i=1;i<=n-tt;i++)
                save[cnt++]=((LL)g[i]*key)%MOD;
    
            for(int i=0;i<cnt-1;i++)
                printf("%I64d ",save[i]);
            printf("%I64d",save[cnt-1]);
            printf("\n");
        }
        return 0;
    }

     4. dp题,和背包很类似, 不过这个是从1-m   每次用1-n 来更新...

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    
    typedef __int64 LL;
    LL dp[100100];
    LL gx[110],gy[110];
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            memset(dp,0,sizeof(dp));
            int m;
            for(int i=0;i<n;i++)
            {
                scanf("%I64d%I64d",&gx[i],&gy[i]);
            }
            scanf("%d",&m);
            for(int i=0;i<=m;i++)
            {
                int w,c;
                LL tmp=dp[i];
                for(int j=0;j<n;j++)
                {
                    LL w=gx[j];
                    LL c=gy[j];
                    if(i<c) continue;
                    tmp=max(tmp,dp[i-c]+w);
                }
                dp[i]=tmp;
            }
            printf("%I64d\n",dp[m]);
        }
        return 0;
    }

    5. 暴力都能过的题, 可以用线段树优化...

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    
    
    int g[100100];
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            memset(g,0,sizeof(g));
            int f,e;
            int x,y;
            for(int i=0;i<n;i++)
            {
                scanf("%d:%d",&x,&y);
                f=x*60+y;
                scanf("%d:%d",&x,&y);
                e=x*60+y;
                for(int i=f;i<e;i++)
                    g[i]=1;
            }
            int sum=0;
            for(int i=0;i<1500;i++)
            {
                if(g[i]==1) sum++; 
            }
            printf("%d\n",1440-sum);
        }
    
        return 0;
    }
  • 相关阅读:
    从一个表复制信息到另一个表
    Base64原理 bits 3>4 8bits/byte>6bits/byte
    blockchain
    routing decisions based on paths, network policies, or rulesets configured by a network administrator
    Least_squares 最小二乘法
    How to Write a Spelling Corrector
    prior knowledge
    Law of total probability
    Subset sum problem
    wdateyearmonthweekgategoryamountcoin
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/2975414.html
Copyright © 2020-2023  润新知