zoukankan      html  css  js  c++  java
  • 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接

    提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5

    1470-1482

    只做出来四道比较水的题目,还需要加强中等题的训练。

    题解:

    E666

    这个题是让求有多少个子串只含有6。寻找连续的6,然后用n*(n+1)/2求出这一段的子串个数,然后把每一段连续的加起来。

    做的时候wa了很多次,原来是在n*(n+1)的地方已经超过int型了,所以需要设置类型为long long。

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    using namespace std;
    int T,N;
    char s[200005];
    long long sum;
    long long int tag;
    int main()
    {
    
        scanf("%d",&T);
        while(T--)
        {
            sum=0;
            tag=0;
            scanf("%d",&N);
            scanf("%s",s);
            for(int i=0;i<N;i++)
            {
    
                if(s[i]=='6')
                {
                    t
                    ag++;
                }
                else
                {
                    sum=sum+(tag*(tag+1))/2;
                    tag=0;
                }
            }
            long long int tt=tag*(tag+1)/2;
            sum+=tt;
            printf("%lld
    ",sum);
        }
        return 0;
    }

    H Blocks

    队友看的这个题,说是裸地斐波那契数列,正好做过矩阵快速幂的于是就粘上了。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    #define mod 1000000007
    
    using namespace std;
    
    struct matrix{
        long long int m[2][2];
    };
    
    matrix base,ans;
    
    void init(int n){//Ö»³õʼ»¯baseºÍans(µ¥Î»¾ØÕó)
        memset(base.m,0,sizeof(base.m));
        memset(ans.m,0,sizeof(ans.m));
        for(int i=0;i<2;i++){
            ans.m[i][i]=1;
        }
    
        base.m[0][0]=base.m[0][1]=base.m[1][0]=1;
    }
    
    matrix multi(matrix a,matrix b){
        matrix t;
        for(int i=0;i<2;i++){
            for(int j=0;j<2;j++){
                t.m[i][j]=0;
                for(int k=0;k<2;k++){
                    t.m[i][j]=(t.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
                }
            }
        }
        return t;
    }
    
    long long int fast_matrix(long long int n){
        while(n){
            if(n&1){
                ans=multi(ans,base);
            }
            base=multi(base,base);
            n>>=1;
        }
        return ans.m[1][0];
    }
    
    int main()
    {
        long long int n;
        while(~scanf("%lld",&n) && n!=0){
            init(n+1);
            printf("%lld
    ",fast_matrix(n+1));
        }
        return 0;
    }

    J Odd number

    最水的一个题,求奇数个数。

    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    int main(){
        int n;
        int ans;
        long long t;
        while(~scanf("%d",&n)){
            ans=0;
            for(int i=0;i<n;i++){
                scanf("%lld",&t);
                if(t%2==1){
                    ans++;
                }
            }
            printf("%d
    ",ans);
        }
    
        return 0;
    }

    K Candy

    糖果题,队友说就一个求n的m次方,只不过数非常大,这不就是快速幂吗!

    #include <iostream>
    #include <cstdio>
    #define MOD2 1000000007
    
    using namespace std;
    
    int T;
    int m,n;
    long long int rel;
    
    long long int fast_power(long long int a,long long int n){
        long long int ans=1,p=a;
        while(n){
            if(n&1){
                ans=((ans%MOD2)*(p%MOD2))%MOD2;
            }
            n>>=1;
            p=((p%MOD2)*(p%MOD2))%MOD2;
        }
        return ans;
    }
    
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            rel=fast_power(m,n);
            printf("%lld
    ",rel);
        }
        return 0;
    }
  • 相关阅读:
    pyecharts 学习笔记(6)--numpy列表与数组的相互转换
    pyecharts 学习笔记(5)
    pyecharts 学习笔记(4)--pyeharts.faker的Faker方法和属性
    Python 把较长的一行代码分成多行的技巧
    JS保留两位小数 四舍五入函数
    使用MYSQL命令直接导入导出SQL文件(转)
    在input中实现点点点与当鼠标移上去时显示剩余的字
    echarts 图表用例
    MySQL Packet for query is too large
    My97DatePicker 时间控件
  • 原文地址:https://www.cnblogs.com/TWS-YIFEI/p/6129108.html
Copyright © 2011-2022 走看看