• Codeforces 757 C Felicity is Coming!


    题目大意:有n个训练营,m种宠物,每个训练营里里面有gi 个宠物,现在每只宠物都要完成一次进化,种类

    相同的宠物进化之后,种类还是相同,种类不同的宠物不能进化成相同种类,且要求所有宠物进化之后,每个

    训练营各个种类的宠物数量不变。

    思维题

    思路:我们不能一个一个训练营考虑,我们要考虑不同种类宠物的情况,我们统计每种宠物出现在那个训练营

    里面且出现几次,统计结果完全一样的宠物种类分为一堆,这一堆里面的宠物如果有x个,则这堆的贡献为x!

    将所有堆得结果想乘就是结果。

    原来将vector<int> vec[ N ] 排序,sort(vec,vec+N),是每个按字典序排序,学到了。

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N=1e6+5;
    const ll mod=1e9+7;
    int n,m;
    ll f[N];
    vector<int> cnt[N];
    int main()
    {
        cin>>n>>m;
        f[0]=1;
        for(ll i=1;i<=m;i++) f[i]=(f[i-1]*i)%mod;
        for(int i=1;i<=n;i++)
        {
            int g; scanf("%d",&g);
            while(g--)
            {
                int w; scanf("%d",&w);
                cnt[w].push_back(i);
            }
        }
        sort(cnt+1,cnt+1+m);
        int c=1;
        ll ans=1;
        for(int i=2;i<=m;i++)
        {
            if(cnt[i]==cnt[i-1])
            {
                c++;
                if(i==m) ans=(ans*f[c])%mod;
            }
            else
            {
                ans=(ans*f[c])%mod;
                c=1;
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    OpenCV 简介
    无缝滚动
    Date 与 switch的运用
    js object(对象)
    arr.sort()排序方法
    删除
    评分
    延时提示框
    数字相加求和
    自定义右键菜单
  • 原文地址:https://www.cnblogs.com/CJLHY/p/7381667.html
Copyright © 2020-2023  润新知