zoukankan      html  css  js  c++  java
  • P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)

    题目描述

    小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为aia_iai,且每个怪物血量均不相同,小豆手里有无限张“亵渎”。亵渎的效果是对所有的怪造成111点伤害,如果有怪死亡,则再次施放该法术。我们认为血量为000怪物死亡。

    小豆使用一张 “亵渎”会获得一定的分数,分数计算如下,在使用一张“亵渎”之后,每一个被亵渎造成伤害的怪会产生xkx^kxk,其中xxx是造成伤害前怪的血量为xxx和需要杀死所有怪物所需的“亵渎”的张数kkk。

    输入输出格式

    输入格式:

    第一行输入一个TTT(T≤10Tleq10T10),表示有多少组测试数据

    每组组测试数据第一行为nnn,mmm,表示有当前怪物最高的血量nnn,和mmm种没有出现的血量

    接下来mmm行,每行111个数aia_iai,表示场上没有血量为aia_iai的怪物

    输出格式:

    一共TTT行,每行一个数, 第iii行表示第iii组测试数据中小豆的最后可以获得的分数, 因为这个分数会很大需要模109+710^9+7109+7

    输入输出样例

    输入样例#1: 复制
    2
    10 1
    5
    4 2
    1
    2
    输出样例#1: 复制
    415
    135

    说明

    对于10%10\%10%的数据,有m=0m=0m=0

    对于20%20\%20%的数据,有m≤1mleq1m1

    对于30%30\%30%的数据,有m≤2mleq2m2

    对于40%40\%40%的数据,有m≤3mleq3m3

    对于50%50\%50%的数据,有m≤4mleq4m4

    对于60%60\%60%的数据,有m≤5mleq5m5

    对于100%100\%100%的数据,有m≤50mleq50m50

    对于100%100\%100%的数据,有n≤1013nleq10^{13}n1013。






    出题的是个sb,题意都说不清楚,醉了。

    这题的最后答案的柿子很好写,这里就不说,关键就是如何求自然数幂和,

    比如sigmg (i^(m))   这里是i的m次方,那和函数应该是一个m+1次的函数,那需要m+2点去

    确定这个多项式。

    然后若果x坐标是连续的,那可以先把所有的乘起来,在除以每一个对应的逆元,

    对于分母,可以预处理阶乘,

    特判一个分母的正负





    ‘’

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define max(a,b) ((a)>(b)?(a):(b))
     6 #define min(a,b) ((a)<(b)?(a):(b))
     7 #define LL long long
     8 #define re register
     9 #define maxn
    10 const LL mod=1e9+7;
    11 inline LL read() {
    12     LL x=0;char c=getchar();while(c<'0'||c>'9') c=getchar();
    13     while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
    14 }
    15 int T;
    16 LL n,m,fac[55],a[55];
    17 inline LL quick(LL a,LL b) {LL S=1;while(b) {if(b&1ll) S=S*a%mod;b>>=1ll;a=a*a%mod;}return S;}
    18 inline LL calc(LL n,int m) {
    19     if(n<=m+2) {
    20         LL ans=0;
    21         for(re int i=1;i<=n;i++) ans=(ans+quick(i,m)%mod)%mod;
    22         return ans;
    23     }
    24     LL ans=1,now=0,tot=0;
    25     for(re int i=1;i<=m+2;i++)
    26         ans=(ans*(n-i+mod)%mod)%mod;
    27     for(re int i=1;i<=m+2;i++) {
    28         now=now+quick(i,m);now%=mod;
    29         LL t=ans*quick((n-i+mod)%mod,mod-2)%mod,q=quick(fac[m+2-i]*fac[i-1]%mod,mod-2);
    30         if((m+2-i)&1) tot-=now*t%mod*q%mod;
    31             else tot+=now*t%mod*q%mod;
    32         tot+=mod;tot%=mod;
    33     }
    34     return tot;
    35 }
    36 int main() {
    37     T=read();fac[0]=1;
    38     for(re int i=1;i<=54;i++) fac[i]=(fac[i-1]*(LL)i)%mod;
    39     while(T--) {
    40         n=read(),m=read();
    41         for(re int i=1;i<=m;i++) a[i]=read();
    42         std::sort(a+1,a+m+1);
    43         LL ans=0;
    44         for(re int i=0;i<=m;i++) {
    45             ans+=calc(n-a[i],m+1);ans%=mod;
    46             for(re int j=i+1;j<=m;j++)
    47                 ans=(ans-quick(a[j]-a[i],m+1)%mod+mod)%mod;
    48         }
    49         printf("%lld
    ",ans);
    50     }
    51     return 0;
    52 }
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define max(a,b) ((a)>(b)?(a):(b))
     6 #define min(a,b) ((a)<(b)?(a):(b))
     7 #define LL long long
     8 #define re register
     9 #define maxn
    10 const LL mod=1e9+7;
    11 inline LL read() {
    12     LL x=0;char c=getchar();while(c<'0'||c>'9') c=getchar();
    13     while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
    14 }
    15 int T;
    16 LL n,m,fac[55],a[55];
    17 inline LL quick(LL a,LL b) {LL S=1;while(b) {if(b&1ll) S=S*a%mod;b>>=1ll;a=a*a%mod;}return S;}
    18 inline LL calc(LL n,int m) {
    19     if(n<=m+2) {
    20         LL ans=0;
    21         for(re int i=1;i<=n;i++) ans=(ans+quick(i,m)%mod)%mod;
    22         return ans;
    23     }
    24     LL ans=1,now=0,tot=0;
    25     for(re int i=1;i<=m+2;i++)
    26         ans=(ans*(n-i+mod)%mod)%mod;
    27     for(re int i=1;i<=m+2;i++) {
    28         now=now+quick(i,m);now%=mod;
    29         LL t=ans*quick((n-i+mod)%mod,mod-2)%mod,q=quick(fac[m+2-i]*fac[i-1]%mod,mod-2);
    30         if((m+2-i)&1) tot-=now*t%mod*q%mod;
    31             else tot+=now*t%mod*q%mod;
    32         tot+=mod;tot%=mod;
    33     }
    34     return tot;
    35 }
    36 int main() {
    37     T=read();fac[0]=1;
    38     for(re int i=1;i<=54;i++) fac[i]=(fac[i-1]*(LL)i)%mod;
    39     while(T--) {
    40         n=read(),m=read();
    41         for(re int i=1;i<=m;i++) a[i]=read();
    42         std::sort(a+1,a+m+1);
    43         LL ans=0;
    44         for(re int i=0;i<=m;i++) {
    45             ans+=calc(n-a[i],m+1);ans%=mod;
    46             for(re int j=i+1;j<=m;j++)
    47                 ans=(ans-quick(a[j]-a[i],m+1)%mod+mod)%mod;
    48         }
    49         printf("%lld
    ",ans);
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    Why Choose Jetty?
    Jetty 的工作原理以及与 Tomcat 的比较
    Tomcat设计模式
    Servlet 工作原理解析
    Tomcat 系统架构
    spring boot 打包方式 spring boot 整合mybaits REST services
    wireshark udp 序列号 User Datagram Protocol UDP
    Maven 的聚合(多模块)和 Parent 继承
    缓存策略 半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis
    Mybatis解决sql中like通配符模糊匹配 构造方法覆盖 mybits 增删改
  • 原文地址:https://www.cnblogs.com/zhangbuang/p/10976373.html
Copyright © 2011-2022 走看看