ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1025 [HAOI2012]容易题(EASY) 组合数学

2022-07-28 19:31:13  阅读:143  来源: 互联网

标签:1025 10 le HAOI2012 ll EASY mod 1000 数列


 链接:https://ac.nowcoder.com/acm/contest/26656/1025
来源:牛客网

题目描述

为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:  有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的值,是不是很简单呢?呵呵!

输入描述:

第一行三个整数n,m,k分别表示数列元素的取值范围,数列元素个数,以及已知的限制条数。
接下来k行,每行两个正整数x,y表示A[x]的值不能是y。

输出描述:

一行一个整数表示所有可能的数列的积的和对1000000007取模后的结果。如果一个合法的数列都没有,答案输出0。
示例1

输入

复制
3 4 5
1 1
1 1
2 2
2 3
4 3

输出

复制
90

说明

样例解释
A[1]不能取1
A[2]不能去2、3
A[4]不能取3
所以可能的数列有以下12种
数列 积
2 1 1 1 2
2 1 1 2 4
2 1 2 1 4
2 1 2 2 8
2 1 3 1 6
2 1 3 2 12
3 1 1 1 3
3 1 1 2 6
3 1 2 1 6
3 1 2 2 12
3 1 3 1 9
3 1 3 2 18

备注:

30%的数据n≤4,m≤10,k≤10n \le 4,m \le 10,k \le 10n≤4,m≤10,k≤10
另有20%的数据k=0{k=0}k=0
70%的数据n≤1000,m≤1000,k≤1000n \le 1000,m \le 1000,k \le 1000n≤1000,m≤1000,k≤1000
100%的数据 n≤109,m≤109,k≤105,1≤y≤n,1≤x≤mn \le 10^9,m \le 10^9,k \le 10^5,1 \le y \le n,1 \le x \le mn≤109,m≤109,k≤105,1≤y≤n,1≤x≤m

分析

每个位置都有n种选择,

加入没有不能选择的数,答案就是:(n*(n-1)/2) ^ m

有了不能选择的数每个位置倒要删去对应的值,假设sum = (n * (n - 1) / 2 ) ,则每个位置对应的值为sum - Ebi

最终结果即为每项相乘。

set<pair<int,int>>s;可以用来去重

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
set<pair<int,int>> s;
map<int,int> mp;
ll mod = 1e9+7;
ll qmi(int a,int n) {
    ll ans = 1,base = a;
    while(n) {
        if(n & 1) ans = (ans * base) % mod;
        base = (base * base) % mod;
        n >>= 1;
    }
    return ans;
}

int main() {
    ll n,m,k,sum = 0;
    cin>>n>>m>>k;
    sum = (n * (n + 1) / 2) % mod;
    for(int i = 1;i<=k;i++) {
        int x,v;cin>>x>>v;
        if(s.count({x,v}))continue;
        mp[x] += v;
        s.insert({x,v});
    }
    ll res = qmi(sum,m - mp.size());
    map<int,int>::iterator it;
    for(it = mp.begin();it != mp.end();it ++ ) res = res * (sum - (it->second)) % mod;
    cout<<(res % mod + mod) % mod;
}

 

标签:1025,10,le,HAOI2012,ll,EASY,mod,1000,数列
来源: https://www.cnblogs.com/er007/p/16529917.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有