zoukankan      html  css  js  c++  java
  • BZOJ 2751: [HAOI2012]容易题(easy)( )

    有限制的最多就K个, 所以我们处理一下这K个就行了. 其他可以任选, 贡献都是∑i (1≤i≤N), 用快速幂。

    -------------------------------------------------------------------

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
     
    using namespace std;
     
    typedef pair<int, int> pii;
    typedef long long ll;
     
    const int maxn = 100009;
    const int MOD = 1000000007;
     
    int N, M, K, sum, ans = 1;
    pii x[maxn];
     
    void Init() {
    scanf("%d%d%d", &N, &M, &K);
    sum = ll(N) * (1 + N) / 2 % MOD;
    for(int i = 0; i < K; i++)
    scanf("%d%d", &x[i].first, &x[i].second);
    sort(x, x + K);
    K = unique(x, x + K) - x;
    }
     
    int Power(int x, int t) {
    int ret = 1;
    for(; t; t >>= 1, x = ll(x) * x % MOD)
    if(t & 1) ret = ll(x) * ret % MOD;
    return ret;
    }
     
    void upd(int &x, int t) {
    if((x -= t) < 0)
    x += MOD;
    }
     
    void Solve() {
    int p = -1, cnt = 1, c = 0;
    for(int i = 0; i < K; i++) if(x[i].first == p)
    upd(cnt, x[i].second);
    else {
    if(~p)
    ans = ll(ans) * cnt % MOD;
    c++;
    p = x[i].first;
    upd(cnt = sum, x[i].second);
    }
    ans = ll(ans) * cnt % MOD * Power(sum, M - c) % MOD;
    printf("%d ", ans);
    }
     
    int main() {
    Init();
    Solve();
    return 0;
    }

    ------------------------------------------------------------------- 

    2751: [HAOI2012]容易题(easy)

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 1416  Solved: 607
    [Submit][Status][Discuss]

    Description


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

    Input


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

    Output

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

    Sample Input

    3 4 5
    1 1
    1 1
    2 2
    2 3
    4 3

    Sample Output

    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

    HINT

    数据范围

    30%的数据n<=4,m<=10,k<=10

    另有20%的数据k=0

    70%的数据n<=1000,m<=1000,k<=1000

    100%的数据 n<=109,m<=109,k<=105,1<=y<=n,1<=x<=m

    Source

  • 相关阅读:
    cocos2dLua3.17.2当在出厂就为 Android11 Version30的手机上黑屏,无法运行的问题 qd
    cocos2dLua3.17.2 + AS3.5.2 创建工程成功 qd
    getdata软件的使用
    下载及安装Python详细步骤
    【硬件知识】电路图标识符号
    Java中高级开发工程师最新面试题整理
    jquery获得值和控制值
    js 根据日期做星座联动,简洁
    Android remove default apk
    registry collection: right click menu(右键菜单清理)/navigator pane(我的电脑左边栏清理)
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/4992647.html
Copyright © 2011-2022 走看看