zoukankan      html  css  js  c++  java
  • 容易题,题解

    题目链接

    分析:

      题意很明白,也很显然,这一题要推式子,那么我们就直接想一下可以推出什么来,首先我们假设第i位可取的数字有di个分别为ai1,ai2,。。。ai(di)。于是我们有,

    S(要求的和)=a11*a21*a31*...*an1+a11*a21*a31*...*an2+a11*a21*a31*...*an3+...+a11*a21*a31*...*an(dn)+...+a1(d1)*a2(d2)*a3(d3)*...*an(dn).

    然后多提取几次公因式就是(a11+a12+...+a1d1)*(a21+a22+...+a2d2)*...*(an1+an2+...+andn).

    然后就好办了因为ai是1——n的数字,所以最初的和是可以确定的,然后出现一个需要限制的就减一点,最后没限制的那个用快速幂,再乘上有限制的。记得有需要去重的去重。

      最后是代码:

    #include <cstdio>
    #include <map>
    using namespace std;
    const int mod=1e9+7;
    const int maxn=1e5+10;
    map<int,int> ma;
    map<pair<int,int>,bool> ma2;
    int s[maxn];
    int js;
    int pow(long long a,int p){
        a%=(long long)mod;
        int s=a;
        int ans=1;
        while(p){
            if(p&1)
                ans=(long long)ans*(long long)s%(long long)mod;
            p>>=1;
            s=(long long)s*(long long)s%(long long)mod;
        }
        return ans;
    }
    int main(){
        int n,m,k;
        scanf("%d%d%d",&n,&m,&k);
        int js1,js2;
        for(int i=1;i<=k;i++){
            scanf("%d%d",&js1,&js2);
            if(ma2[make_pair(js1,js2)])
                continue;
            ma2[make_pair(js1,js2)]=1;
            if(!ma[js1]){
                js++;
                ma[js1]=js;
                s[ma[js1]]=(long long)n*(long long)(n+1)/2ll%(long long)mod;
            }
            s[ma[js1]]=(s[ma[js1]]-js2+mod)%mod;
        }
        int ans=pow((long long)n*(long long)(n+1)/2ll,m-js);
        for(int i=1;i<=js;i++)
            ans=(long long)ans*(long long)s[i]%(long long)mod;
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    第一章Python 数据模型
    Numpy 之 where理解
    探析熟悉而又困惑的参数:argc && argv
    python读书笔记
    经典进程的同步问题之——读者写者
    经典进程的同步问题之——哲学家进餐
    冰多多团队博客目录
    团队事后分析
    冰多多团队Gamma阶段发布说明
    gamma测试报告
  • 原文地址:https://www.cnblogs.com/wish-all-ac/p/12878068.html
Copyright © 2011-2022 走看看