zoukankan      html  css  js  c++  java
  • GTY's birthday gift【矩阵快速幂】

    题目大意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次,每次可以向可重集中加入一个数 a+b ,现在GTY想最大化可重集的和,这个工作就交给你了。 注:可重集是指可以包含多个相同元素的集合

    思路:这题 呵呵呵,太伤心 不想写思路

    #include<iostream>
    #include<cstdio>
    #include <math.h>
    #include<algorithm>
    #include<string.h>
    #include<queue>
    #define MOD 10000007
    #define maxn 200000
    #define LL long long
    using namespace std;
    long long y;
    struct mat
    {
            long long m[3][3];
            mat(){memset(m,0,sizeof(m));}
    };
    mat operator *  (mat a,mat b)
    {
            mat ans;
            for(int i=0;i<=2;i++)
                    for(int j=0;j<=2;j++)
                            for(int k=0;k<=2;k++)
                                    ans.m[i][j]=(ans.m[i][j]+a.m[i][k]*b.m[k][j])%MOD;
            return ans;
    }
    mat pow(mat a,long long n)
    {
            if(n==0){
                    memset(a.m,0,sizeof(a));
                    for(int i=0;i<=2;i++)a.m[i][i]=1;
            }
            if(n==1)return a;
            if(n&1)return a*pow(a,n-1);
            else{
                    mat u=pow(a,n>>1);
                    return u*u;
            }
    }
    long long a[maxn];
    int main()
    {
            long long x;
            while(scanf("%I64d%I64d",&x,&y)!=EOF)
            {
                    long long sum=0;
                    for(int i=1;i<=x;i++)scanf("%I64d",&a[i]),sum+=a[i];
                    sort(a+1,a+1+x);
                    long long c=a[x],d=a[x-1];
                    mat u,v;
                    u.m[0][0]=u.m[0][1]=u.m[1][1]=u.m[1][2]=u.m[2][1]=1;
                    v.m[0][0]=v.m[1][0]=v.m[2][0]=1;
                    u=pow(u,y);
                    v=u*v;
                    printf("%I64d ",(c*v.m[0][0]+d*v.m[1][0]+sum-c-d+MOD)%MOD);
            }
            return 0;
    }

  • 相关阅读:
    2021.2.5 学习总结
    2021.2.1 学习总结
    2021.2.4 学习总结
    学习:C#中struct与class的区别(转)
    学习:DirectoryEntry::Path 属性(winnt、LDAP、IIS)(转)
    学习:Asp.net页面传值总结(转)
    学习:WinForm分页控件(转)
    学习:c#中抽象类和接口的相同点跟区别(转)
    学习:C#中获取当前路径的几种方法(转)
    记录:new关键字、new修饰符、new约束
  • 原文地址:https://www.cnblogs.com/philippica/p/4280055.html
Copyright © 2011-2022 走看看