首页 > 其他分享 >[数学记录]abc276G Count Sequences

[数学记录]abc276G Count Sequences

时间:2022-11-07 21:55:17浏览次数:59  
标签:Count return int ans leq 1ll Sequences abc276G mod

题意:对满足以下条件的序列计数,膜 \(998244353\):

  • \(0 \leq a_0 \leq a_1 \cdots \leq a_n \leq m\)
  • $a_i \not\equiv a_j \pmod 3 $

这题的难点在于发现它是简单题。

想了一上午生成函数啊(

不等于很难处理,所以做一遍差分,令 \(n\) 自增 \(1\),题意转化为:\(\sum b_i = m\) 且 \(b_i \not\equiv 0\) 对 \(i \in [2,n-1]\) 成立。

然后就会发现等价于求 \([x^m] \left ( \dfrac{1}{1-x} \right)^2 \left ( \dfrac{1}{1-x}-\dfrac{1}{1-x^3} \right )^{n-2}\),然后怎么算呢,我也不会啊hh

首先,数字的个数是一定的,这意味着其实可以只关注膜 \(3\) 余数。

为了处理回剩余数,应把多于的 \(3\) 分配到剩下数。

能发现中间的数的取值只有 \(1/2\),这意味着枚举几个 \(2\) 是完全可接受的。

此时同时枚举第一个数,最后一个数便会随之确定。

做完了。这是黄?我不信。

#include <cstdio>
using namespace std;
const int M = 1e7+5, mod = 998244353;
int qpow(int a, int b){
    long long ans = 1ll;
    for(; b; b >>= 1) {if(b & 1) ans = 1ll * ans * a % mod; a = 1ll * a * a % mod;}
    return ans;
}
int inv(int k) {return qpow(k, mod - 2);}
int addd(int a, int b) {a += b; return a > mod ? a-mod : a;}
int minus(int a, int b) {a -= b; return a < 0 ? a+mod : a;}
void add(int &x, int y) {x += y; if(x > mod) x -= mod;}
int fact(int x) {int ans = 1; for(int i = 1; i <= x; i++) ans = 1ll * ans * i % mod; return ans;}
int fac[M], invfac[M], invn[M];
void pre(int n = M - 3){
    fac[0] = invfac[0] = fac[1] = invfac[1] = invn[1] = 1;
    for(int i = 2; i <= n; i++)
        invn[i] = 1ll * (mod - mod/i) * invn[mod%i] % mod,
        fac[i] = 1ll * fac[i-1] * i % mod,
        invfac[i] = 1ll * invfac[i-1] * invn[i] % mod;
}
int C(int n, int m) {return m > n ? 0 : 1ll * fac[n] * invfac[m] % mod * invfac[n-m] % mod;}
int n, m, ans;
int main(){
    pre(); scanf("%d %d", &n, &m);
    ++n;
    for(int i = 0; i <= n-2; i++) {
        int j = n - 2 - i;
        for(int s = 0; s < 3; s++) {
            int t = (m - 2*i - j - s) % 3;
            if(t < 0) continue;
            int res = m - 2*i - j - t - s; res /= 3;
            add(ans, 1ll * C(n-2, i) * C(res + n - 1, n - 1) % mod);
        }
    } 
    printf("%d\n", ans);
}

标签:Count,return,int,ans,leq,1ll,Sequences,abc276G,mod
From: https://www.cnblogs.com/purplevine/p/16867616.html

相关文章

  • 数组~Count digits from a text stream
    题目描述Countdigits,whitespaces(‘’,’\n’,’\t’)andothercharactersfromatextstreamendingwithEOF.输入AtextstreamendingwithEOF输出Pr......
  • Service Account
    在kubernetes中,有两种类型的账号,用户账号和服务账号;用户账号被用户所使用,服务账号被机器所使用;用户账号能够被管理员用作管理集群,或被开发人员用来在集群中部署应用;服......
  • Codeforces Subsequences
    题目:KarllikesCodeforcesandsubsequences.HewantstofindastringoflowercaseEnglishlettersthatcontainsatleastksubsequencescodeforces.Outofall......
  • SqlServer 使用 count功能查询数量
     1、返回的是一个object类型,也就是说是所有数据类型的基类,可根据select所得的第一列的数据类型转换为对应的数据类型intcount=(int)cmd.ExecuteScalar();2、当sel......
  • CF1349F1 Slime and Sequences (Easy Version)
    linkSolution以前看到过,但是一直没有做......
  • 【模板】popcount
    postedon2022-02-0418:11:33|under模板|sourceintpopcount(intx){#defineBIT2(n)n,n+1,n+1,n+2#defineBIT4(n)BIT2(n),BIT2(n+1),BIT2(n+1),BIT2......
  • 并发工具之 Semaphore & CountDownLatch
    1.semaphore是什么?Semaphore字面意思是信号量的意思。它的作用是控制访问特定资源的线程数量,底层依赖AQS的状态state,是生产中比较常用的一个工具类。(基于共享模式)//......
  • counting-in-2d
    【模板】二维数点postedon2022-10-2313:50:24|under模板|sourceproblem给定一个二维平面,多次询问$x\in[l_x,r_x],y\in[l_y,r_y]$的点有多少个。solution1(静......
  • 题解 [ABC259Ex] Yet Another Path Counting
    首先,每种颜色互不干扰,因此考虑对每种颜色统计答案。有两种解法:枚举起始格子\((x,y)\)和结尾格子\((z,w)\),由组合数易知共有\(\binom{z-x+w-y}{z-x}\)种路径。时间......
  • CountDownLatch并发工具类
    作用CountDownLatch允许一个或多个线程等待其他线程完成操作,相当于一个加强版的join方法。核心方法CountDownLatch的构造函数接收一个int类型的参数作为计数器,如果你想等待N......