首页 > 其他分享 >CF294C Shaass and Lights

CF294C Shaass and Lights

时间:2024-02-17 20:11:21浏览次数:28  
标签:qpow pw int Shaass CF294C len Lights ans jc

对于给定的 \(m\) 个点,将整个序列分为了 \(m+1\) 段,我们可以先将每一段看作同一个类型,同一个类型间不同的顺序看作同一种。那么显然,答案即为可重集的排列数。

设 \(\{S=n_1 \cdot a_1,n_2\cdot a_2,...,n_k \cdot a_k \}\) 表示由 \(n_i\) 个 \(a_i\) 组成的集合。那么此集合的排列数为 \(\dfrac{(\sum\limits_{i=1}^n n_i)!}{\prod\limits_{i=1}^n n_i!}\)。

再来看每一个相同类型的内部方案数。显然,对于非最左和最右的一段,每次我可以选择左右最后选择的两个端点的相邻点,设该相同类型的长度为 \(len\),则方案数为 \(2^{len-1}\)。对前面的方案数相乘即可。

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define R(i, l, r) for (int i = (l); i <= (r); ++i)
#define int ll
const int N = 2000 + 5, P = 1e9 + 7;
int n, m, ans = 1;
int a[N], pw[N], jc[N];
int qpow(int a, int b)
{
    int res = 1, base = a;
    while (b)
    {
        if (b & 1) res = res * base % P;
        base = base * base % P;
        b >>= 1;
    }
    return res;
}
signed main()
{
    cin >> n >> m;
    pw[0] = jc[0] = 1;
    R(i, 1, n) pw[i] = pw[i - 1] * 2 % P, jc[i] = jc[i - 1] * i % P;
    // 将每个段看成同一种类型 方案即为可重集排列数
    // 再单独看每一个段的方案数 只需要看中间段,每次有两种选择
    R(i, 1, m) cin >> a[i];
    sort(a + 1, a + m + 1);
    int t = n - m;
    R(i, 1, t) (ans *= i) %= P;
    ans *= qpow(jc[a[1] - 1], P - 2); ans %= P;
    ans *= qpow(jc[n - a[m]], P - 2); ans %= P;
    R(i, 2, m)
    {
        int len = a[i] - a[i - 1] - 1;
        if (len) (ans *= pw[len - 1]) %= P;
        (ans *= qpow(jc[len], P - 2)) %= P;
    }
    cout << ans << endl;
    return 0;
}

标签:qpow,pw,int,Shaass,CF294C,len,Lights,ans,jc
From: https://www.cnblogs.com/cyyhcyyh/p/18018306

相关文章

  • G. Lights
    原题链接太巧妙了!!关键1:把开着的灯当成黑点看待关键二:如图更多细节请看代码code#include<bits/stdc++.h>usingnamespacestd;intto[100005];//代表会被我影响的灯,抽象成边voidsolve(){intn;intstate[100005]={0};//代表每个灯的状态int......
  • P9017 [USACO23JAN] Lights Off G 题解
    一次操作相当于把\(a\)异或上\(b\),修改开关的一位相当于将这一位异或上\(1\)。会发现一个很神奇的性质:初始开关对灯的影响和改变开关状态对灯的影响是独立的。而前者的影响是固定的,所以我们可以只考虑改变开关状态对灯的影响。假设一共需要\(k\)次操作能使所有灯关闭,如果我......
  • [CF958F3] Lightsabers (hard)
    题目链接对于一种元素\(v\),假设它在给出可重集合中出现了\(t\)次,那么容易把它表示成基础的生成函数形式:\(1+x+x^2+x^3+\dots+x^t\)。显然,把所有元素的生成函数卷一下就是答案。但是这样最坏情况为\(O(nm\logn)\)的,不能通过这道题。在思考优化方式时,容易想到启发式合并来优......
  • G. Lights
    G.LightsIntheendoftheday,Annaneedstoturnoffthelightsintheoffice.Thereare$n$lightsand$n$lightswitches,buttheiroperationschemeisreallystrange.Theswitch$i$changesthestateoflight$i$,butitalsochangesthestateofso......
  • 谁可以从使用 Amazon Lightsail 进行 VPS 托管中受益?
    文章作者:Libai介绍在当今数字化的环境中,拥有可靠和高效的托管解决方案对于企业和个人来说至关重要。由于其灵活性、可扩展性和成本效益,虚拟专用服务器(VPS)托管已经在市场上获得了巨大的流行。AmazonLightsail 正是市场上备受瞩目的一种 VPS 托管解决方案。亚马逊云科技开发......
  • Lightsail VPS 实例在哪些方面胜过 EC2 实例?
    文章作者:Libai引言LightsailVPS 实例和 EC2 实例是云计算领域中两种受欢迎的技术。虽然两者都提供虚拟服务器解决方案,但了解 LightsailVPS 实例在哪些方面胜过 EC2 实例非常重要。在本文中,我们将探讨这两种技术之间的关键区别,并突出使用 LightsailVPS 实例的优势。......
  • 什么是 Amazone LightSail 中的 Tags 概念
    AmazonLightsail允许您将标签作为标签分配给资源。每个标签都是由一个键和一个可选值组成的标签,可以高效地管理、搜索和过滤资源。尽管没有固有的标签类型,但它们允许您按用途、所有者、环境或其他标准对Lightsail资源进行分类。当您拥有许多相同类型的资源时,这非常有用。......
  • 什么是 Amazon Lightsail
    AmazonLightsail是亚马逊(Amazon)推出的一项基于云端的轻量级计算服务,它旨在使用户能够轻松快速地建立虚拟专用服务器(VPS),提供简便、经济实惠的云计算解决方案。AmazonLightsail的主要特点包括:1.简易性:用户友好的界面:提供直观的控制台,使用户能够快速部署服务器和应用程序。快......
  • Lightsail CDN 现已对 Lightsail Container Services 作为来源进行支持
    AmazonLightsail 现在通过将LightsailCDN与您的LightsailContainerServices结合使用,为您提供了优化向全球受众交付容器化应用程序的功能。只需从Lightail控制台点击几下,Lightail容器就可以配置为LightsailCDN分配的来源。亚马逊云科技开发者社区为开发者们提供全......
  • Amazon Lightsail 宣布为域注册和 DNS 自动配置提供支持
    您现在可以在 AmazonLightsail 上注册域名和自动配置域名系统(DNS)。对于需要安全、高性能且可靠的虚拟专用服务器(VPS) 解决方案的用户来说,AmazonLightsail 是开始使用亚马逊云科技的一种最简单方法,它具有简单的管理界面和可预测的定价。通过增加域注册,Lightsail 用户......