• vector的哈希值 Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C


    http://codeforces.com/contest/757/problem/C

    题目大意:有n个导管,每个体育馆有k种神奇宝贝,然后所有的n个体育馆中,一共有m中神奇宝贝。可知,每个神奇宝贝中都可以相互转化。问,有多少种转化方式,使得每个体育馆里面的所有类型的数目不变(可以所有的不转化)

    思路:我第一次知道vector竟然可以通过hash的方式来解决问题!!!

    定义vector<int> ve[i]表示第i种神奇宝贝属于哪些道馆,然后我们sort(ve + 1, ve + 1 + m),再判断ve[i] == ve[i-1]即可。

    //看看会不会爆int!数组会不会少了一维!
    //取物问题一定要小心先手胜利的条件
    #include <bits/stdc++.h>
    #pragma comment(linker,"/STACK:102400000,102400000")
    #define LL long long
    #define ALL(a) a.begin(), a.end()
    #define pb push_back
    #define mk make_pair
    #define fi first
    #define se second
    #define haha printf("haha
    ")
    const int maxn = 1e6 + 5;
    std::vector<int> ve[maxn];
    const LL mod = 1e9 + 7;
    int n, m;
    
    int main(){
        std::cin >> n >> m;
        for (int i = 1; i <= n; i++){
            int k; scanf("%d", &k);
            while (k--){
                int u; scanf("%d", &u);
                ve[u].push_back(i);
            }
        }
        std::sort(ve + 1, ve + 1 + m);
        LL ans = 1, cnt = 1;
        for (int i = 2; i <= m; i++){
            if (ve[i] == ve[i - 1]){
                ans = ans * (++cnt) % mod;
            }
            else cnt = 1;
        }
        std::cout << ans << std::endl;
        return 0;
    }
    View Code
  • 相关阅读:
    5.4.3 果园里的树
    5.3.2 字母重排
    5.3.1 6174问题
    Codeforces Round #253 (Div. 2), problem: (B)【字符串匹配】
    POJ1054 枚举【STL__binary_search()_的应用】
    432B
    0x3f3f3f3f...编程中无穷大常量的设置技巧
    2014年百度之星程序设计大赛 资格赛第一题 (longlong)
    Tarjan
    Dijkstra、Dij + heap、Floyd、SPFA、 SPFA + SLF Template
  • 原文地址:https://www.cnblogs.com/heimao5027/p/6430738.html
Copyright © 2020-2023  润新知