首页 > 其他分享 >Codeforces 1761D Carry Bit

Codeforces 1761D Carry Bit

时间:2024-05-11 11:41:26浏览次数:16  
标签:frac int ll times Carry Bit 1761D binom mod

令 \(c_i\) 为第 \(i\) 位带来的进位的值,令 \(c_{-1} = 0\)。

考虑如果知道了 \(c_{i - 1}, c_i\) 的值,\(a_i, b_i\) 有多少种选法:

  • \(c_{i - 1} = 0, c_i = 0\),\((a_i, b_i) = (0, 0), (0, 1), (1, 0)\)。
  • \(c_{i - 1} = 1, c_i = 1\),\((a_i, b_i) = (1, 1), (0, 1), (1, 0)\)。
  • \(c_{i - 1} = 0, c_i = 1\),\((a_i, b_i) = (1, 1)\)。
  • \(c_{i - 1} = 1, c_i = 0\),\((a_i, b_i) = (0, 0)\)。

于是可以观察到若 \(c_i = c_{i - 1}\),\((a_i, b_i)\) 有 \(3\) 种选法,否则 \((a_i, b_i)\) 有 \(1\) 种选法。

于是若知道了 \(c_i\not c_{i - 1}\) 的个数 \(p\),那么 \((a_i, b_i)\) 的选法就是 \(3^{n - p}\)。
那么就不需要考虑 \((a_i, b_i)\),只用考虑 \(c_i\) 了。
那么如果算上 \(c_{-1}\),因为 \(p\) 的定义所以可以知道 \(c_i = 0\) 有 \(\lceil\frac{p + 1}{2}\rceil\) 个连续段,\(c_i = 1\) 有 \(\lfloor \frac{p + 1}{2}\rfloor\) 个连续段。
同时因为限制了 \(c_i = 1\) 的个数为 \(k\),相对也限制了 \(c_i = 0\) 的个数为 \(n + 1 - k\)。
所以 \(c_i\) 的方案数就是插板法得到 \(\binom{k - 1}{\lfloor \frac{p + 1}{2}\rfloor - 1}\times \binom{n - k}{\lceil\frac{p + 1}{2}\rceil - 1}\)。
所以固定 \(p\) 对应的方案数就是 \(3^{n - p}\times \binom{k - 1}{\lfloor \frac{p + 1}{2}\rfloor - 1}\times \binom{n - k}{\lceil\frac{p + 1}{2}\rceil - 1}\)。

那么枚举一下 \(p\) 即可,即求 \(\sum\limits_{p = 1}^n 3^{n - p}\times \binom{k - 1}{\lfloor \frac{p + 1}{2}\rfloor - 1}\times \binom{n - k}{\lceil\frac{p + 1}{2}\rceil - 1}\)。
注意判一下 \(k = 0\) 时所有 \(c_i\) 都为 \(0\) 答案为 \(3^n\) 的情况。

时间复杂度 \(\mathcal{O}(n)\)。

#include<bits/stdc++.h>
using ll = long long;
constexpr ll mod = 1e9 + 7;
inline ll qpow(ll a, ll b = mod - 2, ll v = 1) {
   while (b) {
      b & 1 && ((v *= a) %= mod);
      b >>= 1, (a *= a) %= mod;
   }
   return v;
}
const int maxn = 1e6 + 10;
ll fac[maxn], invf[maxn];
inline ll binom(int n, int m) {
   if (n < m) return 0;
   return fac[n] * invf[n - m] % mod * invf[m] % mod; 
}
int main() {
   int n, k;
   scanf("%d%d", &n, &k);
   fac[0] = 1;
   for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % mod;
   invf[n] = qpow(fac[n]);
   for (int i = n; i; i--) invf[i - 1] = invf[i] * i % mod;
   if (! k) return printf("%lld\n", qpow(3, n)), 0;
   ll ans = 0, v = 1;
   for (int i = n; i; i--, (v *= 3) %= mod)
      (ans += v * binom(k - 1, (i + 1) / 2 - 1) % mod * binom(n - k, (i + 2) / 2 - 1)) %= mod;
   printf("%lld\n", ans);
   return 0;
}

标签:frac,int,ll,times,Carry,Bit,1761D,binom,mod
From: https://www.cnblogs.com/rizynvu/p/18186217

相关文章

  • mybits
    mybits配置链接:https://pan.baidu.com/s/11-oQZgSosdcvUiEMxmRMkA?pwd=msdt提取码:msdt![6daa7e673d972cdd3a904b3bc10d63ee](G:\360MoveData\Users\nixg\Documents\TencentFiles\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\6daa7e673d972cdd3a904b3bc10d63ee.png)......
  • C:$Mft(NTFS主文件表)C:$LogFile(NTFS卷日志)C:$BitMap(NTFS可用空间映射) C:$Mft$BITMAP C
    C:$Mft(NTFS主文件表)是NTFS文件系统中的一个重要组成部分。它是一个特殊的系统文件,用于记录NTFS分区中所有文件和目录的元数据信息。MFT实际上是MasterFileTable的缩写,意为主文件表。在NTFS文件系统中,每个文件和目录都有一个对应的记录,这些记录存储在MFT中。MFT中的每个记录......
  • 【container】【docker-compose】【mysql】【redis】【rabbit mq】【mongo】【elastic
    @目录写在前面mysqlredisrabbitmqmongoelasticsearch单节点多节点参考资料dockerkuberneteshelmk3s写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。mysqlversion:'3'services:......
  • rabbitmq开启ssl
    官网:https://www.rabbitmq.com/docs/management#multiple-listeners 生成证书opensslreq-newkeyrsa:2048-nodes-keyoutrsa_private.key-x509-days365-outcert.crt//一次性生成私钥和证书2.使用已有RSA私钥生成自签名证书opensslreq-new-x509-days36......
  • .Net Core中使用RabbitMQ
    开发中经常用到发布订阅的功能,之前一直用的Redis,使用过程中也出现了一些问题,后来换了RabbitMQ,用上去更顺手,简单记录一下。正文开始:RabbitMQ是一个开源的,基于AMQP(AdvancedMessageQueuingProtocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点,发布订阅等消息处......
  • [Paper Reading] LSS: Lift, Splat, Shoot: Encoding Images from Arbitrary Camera R
    名称Lift,Splat,Shoot:EncodingImagesfromArbitraryCameraRigsbyImplicitlyUnprojectingto3D时间:20.08机构:NVIDIATL;DR后融合方法将每一目感知结果通过相机参数转换到BEV空间再后融合,LSS开启前融合的先河,将特征通过先lift再splat到BEV空间,通过BEV空间特征直接预......
  • Mac 安装 RabbitMQ
    一般来说,安装分为两种方式:通过brew命令安装。在这里,推荐使用brew来安装,非常强大的Mac端包管理工具。下载RabbitMQ源文件,解压源文件之后进行安装。Docker启动一、brew命令安装Mac安装RabbitMQ1、安装erlangbrewinstallerlang2、安装rabbitmqbrewinstall......
  • D. A BIT of an Inequality
    原题链接题解1.如果\(x\oplusy\gtx\),则\(y\)的最高位对应的\(x\)一定是\(0\)2.$f(x,y)\oplusf(y,z)\gtf(x,z)$等价于\(f(x,z)\oplusa_y\gtf(x,z)\)3.\(x\in[1,y]\)则\(x-1\in[0,y-1]\)code#include<bits/stdc++.h>usingnamespacest......
  • RabbitMQ的基本使用
    在数据采集的过程中,可能需要一些进程间的通信,如一个进程负责构造爬取请求,另一个负责执行这些请求;某个数据爬取进程执行完毕,通知另一个负责数据处理的进程开始爬取数据;某个进程新建了一个爬取任务,通知另一个负责数据爬取的进程开始爬取数据。为了降低进程耦合度,需一个消息......
  • BiTCN:基于卷积网络的多元时间序列预测
    在时间序列预测领域中,模型的体系结构通常依赖于多层感知器(MLP)或Transformer体系结构。基于mlp的模型,如N-HiTS,TiDE和TSMixer,可以在保持快速训练的同时获得非常好的预测性能。基于Transformer的模型,如PatchTST和ittransformer也取得了很好的性能,但需要更多的内存和时间来训练。......