题解:P7468 [NOI Online 2021 提高组] 愤怒的小 N

news/2025/11/5 12:03:32/文章来源:https://www.cnblogs.com/LUlululu1616/p/19193217

题意:有一个由以下方式生成的字符串:

  • 初始为 \(s=a\),每次令 \(s'\)\(s\)\(a\rightarrow b,b\rightarrow a\),然后令 \(s=s+s'\),重复无限次该操作。

然后给出一个数 \(n\) 和一个 \(k\) 项的多项式 \(f(x)\),求

\[\sum_{i=0}^n [s_i=b]f(i) \]

\(n\le 2^{5\times 10^5},k\le 500\)

做法:

首先一个朴素的想法,\(F_i(x)\) 代表 \(\sum\limits_{j=0}^{2^i-1}f(x+j)[s_{j}=a]\),类似定义 \(G\) 代表 \(b\) 的。那么很容易列出来一个倍增的转移式:

\[F_i(x) = F_{i-1}(x) + G_{i-1}(x+2^{i-1}) \]

\[G_i(x) = G_{i-1}(x) + F_{i-1}(x+2^{i-1}) \]

初值为 \(F_0(x) = f(x), G_0(x) = 0\)

答案计算就是从高位往低位考虑,第一段取 \(G\),第二段取 \(F\) 递归就可以了。

直接去做值域平移可以做到 \(O(k^2\log n)\)

考虑如何优化,这一步感觉太神秘了。考虑定义 \(H_i(x) = F_{i}(x) - G_{i}(x)\),那么可以写出来 \(H\) 的转移式:

\[H_i = H_{i-1}(x) - H_{i-1}(x+2^{i-1}) \]

发现里面出现了一个减法。这意味着什么呢,因为我值域平移是不影响最高位系数的,所以两个一减最高位就被吃掉了!所以意味着非 \(0\)\(H\) 其实只有 \(k\) 项,后面的 \(F,G\) 其实是一样的。

我们考虑用 \(H\) 带回去表示 \(F\),那么 \(F\) 就是 \(\frac{F+G+H}2\)\(G\) 就是 \(\frac{F+G-H}2\)。我们把贡献分成两部分,一部分是 \(F+G\),一部分是 \(H\)

\(H\) 很好算,就是我们上面说的暴力,复杂度 \(O(k^3)\)\(F+G\) 本质上加总展开就是 \(\sum\limits_{i=0}^{n-1}f(i)\)。注意到这个东西是个 \(k\) 项的多项式的前缀和,所以应该也是一个 \(k+1\) 项的多项式,直接暴力求 \(k+1\) 个出来插值就可以,复杂度 \(O(k^2)\)

总复杂度 \(O(k^3+n)\)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 505, mod = 1e9 + 7, maxN = 5e5 + 5;
string s;
int n, m, C[maxn][maxn], pw[maxn], jc[maxn], revjc[maxn], pre[maxn], suf[maxn], inv[maxn];
struct Poly {vector<int> a;void resize(int N) {a.resize(N);}	int size() {return a.size();}int& operator[](int x) {return a[x];}void pop_back() {a.pop_back();}friend Poly operator+(Poly x, Poly y) {int n = x.size();for (int i = 0; i < n; i++)x[i] = (x[i] + y[i]) % mod;return x;}friend Poly operator-(Poly x, Poly y) {int n = x.size();for (int i = 0; i < n; i++)x[i] = (x[i] - y[i] + mod) % mod;while(x.size() && !x[x.size() - 1])x.pop_back();return x;}Poly shift(int k) {int n = size();Poly f; f.resize(n);pw[0] = 1;for (int i = 1; i <= n; i++)pw[i] = pw[i - 1] * k % mod;for (int i = 0; i < n; i++) for (int j = 0; j <= i; j++) f[j] = (f[j] + C[i][j] * a[i] % mod * pw[i - j] % mod) % mod;return f;}int queryp(int x) {int res = 0;for (int i = size() - 1; i >= 0; i--)res = (res * x + a[i]) % mod;return res;}int query(int x) {int n = size();if(x < n)return a[x];pre[0] = 1, suf[n] = 1;for (int i = 1; i < n; i++)pre[i] = pre[i - 1] * inv[i] % mod;for (int i = n - 1; i >= 1; i--)suf[i] = mod - suf[i + 1] * inv[(n - i)] % mod;int ans = 0, res = 1;for (int i = 1; i < n; i++) res = res * (x - i) % mod, pre[i] = pre[i] * res % mod;res = 1;for (int i = n - 1; i >= 1; i--)res = res * (x - i) % mod, suf[i] = suf[i] * res % mod;for (int i = 1; i < n; i++)ans = (ans + a[i] * pre[i - 1] % mod * suf[i + 1] % mod) % mod;return ans;}
} f[maxN], t, lg;
int pw2[maxN];
void prepare() {C[0][0] = 1;for (int i = 1; i <= n; i++) {C[i][0] = 1;for (int j = 1; j <= i; j++)C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;}
}
signed main() {cin >> s >> n;reverse(s.begin(), s.end());m = s.size(), s = ' ' + s;t.resize(n);for (int i = 0; i < n; i++)cin >> t[i];pw2[0] = 1;for (int i = 1; i <= m; i++)pw2[i] = pw2[i - 1] * 2 % mod;f[0] = t;prepare();for (int i = 1; i <= m; i++) f[i] = f[i - 1] - f[i - 1].shift(pw2[i - 1]);int ans = 0, nw = 0, sum = -1, coef = mod - 1;for (int i = m; i >= 1; i--) {if(s[i] == '1') {ans = (ans + coef * f[i - 1].queryp(nw) % mod) % mod;coef = mod - coef;nw = nw + pw2[i - 1], nw %= mod;sum = (nw - 1 + mod) % mod;}}if(sum != -1) {lg.resize(n + 2);inv[0] = inv[1] = 1;for (int i = 2; i <= n + 1; i++)inv[i] = (mod - mod / i) * inv[mod % i] % mod;lg[0] = t.queryp(0);for (int i = 1; i <= n + 1; i++)lg[i] = t.queryp(i), lg[i] = (lg[i - 1] + lg[i]) % mod;ans = (ans + lg.query(sum)) % mod;//cout << ans << endl;}cout << ans * (mod + 1) / 2 % mod << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/956687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB实现TDOA麦克风阵列声源定位

一、系统设计 1. 硬件配置参数 % 麦克风阵列参数 c = 343; % 声速(m/s) fs = 48000; % 采样率(Hz) mic_pos = [0,0; 0.1,0; 0.1,0.05; 0,0.1]; % 四麦克风正方形阵列坐标2. 信号流图 声源 → 麦克风1 → 预…

深入解析:极简学习工具产品蓝图、路线图、甘特图、交付清单

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:[Web网页] LAMP 架构与环境搭建

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年杭州专业代运营公司权威推荐榜单:直播代播/直播代运营/找电商代运营源头公司精选

电商与内容平台加速融合的背景下,杭州作为"中国电商之都",其代运营行业已进入技术驱动与全域运营的新阶段。据行业数据显示,杭州代运营公司数量已超过300家,占据全国电商代运营市场近40%的份额。2025年,…

2025.11.3 NOIP 模拟赛

前言 T3挂没了,此记。 A AT_chokudai_S002_k 考虑建图,发现如果一个联通块存在环就可以全部贡献,否则只能贡献联通块大小 \(-1\)。 直接算就行。 B P10116 拆贡献,依次对每个出现的位置的方案进行累加。 发现无论序…

2025年透水地坪实力厂家权威推荐榜单:透水路面/透水砼/透水混凝土增强剂源头厂家精选

在生态城市与海绵城市建设持续推进的背景下,透水地坪凭借其优异的透水性能与生态效益,已成为市政工程、园林景观及商业空间的重要铺装材料。据行业报告显示,2025年全球透水园林地坪铺设系统行业市场规模保持稳健增长…

2025 最新推荐移民服务机构排行榜:精选靠谱中介,提供专业澳洲美国欧洲等国移民方案葡萄牙 / 新西兰 / 新加坡 / 投资 / 购房移民公司推荐

引言 随着全球化发展,移民需求持续增长,移民服务机构数量激增,但行业质量参差不齐,选择靠谱机构成为难题。为此,国际移民服务行业协会开展专项测评,结合近 3 年机构服务数据、客户满意度调查(有效样本超 2 万份…

vue项目中使用sm4加密 ,gm-crypto

参考地址 https://www.npmjs.com/package/gm-crypto安装插件命令 npm i gm-crypto使用 import {SM4} from "gm-crypto"const key="xxxxx324324前后端统一的key" const text="需要加密的文本&…

字符串截取方法测试。

package com.example.string;/** * 从字符串中截取指定范围的子字符串或字符。Extract the string. * substring 的起始索引是 0,从索引 0 开始就是从第一个字符开始往后查找并截取到截止索引处。 * 从索引 1 开始就是…

结构(2)If语句和For循环

结构(2)If语句和For循环结构(2)If语句和For循环 If语句 package com.kun.struct;import java.util.Scanner;public class IfDemo01 {public static void main(String[] args) {Scanner scanner = new Scanner(Syst…

B. Fox And Two Dots

https://codeforces.com/problemset/problem/510/B 题意:给定一个n*m的的矩阵,矩阵只包含26个大写字母,矩阵中相邻并且相同的字符可以联通,问矩阵中是否存在数量>=4的环。 思路:视每个位置为一个node,进行编号…

Zotero文件夹中的文献自动更新到LaTeX文件夹中的.bib文件

在Zotero中创建一个你这个论文对应的参考文献的文件夹,如paper1; 在Zotero中选中整个paper1文件夹下的所有的参考文献条目,右键选择导出条目; 弹出对话框中,格式选择Better BibTeX即可,注意框选保持更新选项,如下…

OTA远程升级实现记录

OTA远程升级实现记录STM32程序更新实现 MCU程序更新逻辑是:STM32的flash地址从0x0x0800 0000开始,将flash中分出三个分区,分别作为BootLoader、APP1、APP2,每个区都可能存储着各自的代码程序 MCU上电、复位后从 0x…

结构(1)While和DoWhile

结构(1)While和DoWhile结构(1)While和DoWhile While package com.kun.struct;public class WhileDemo01 {public static void main(String[] args) {// 输出1到100int i = 0; // 初始化变量i为0while (i < 100)…

2025 年工业风机厂家最新推荐排行榜:涵盖离心、高温、防腐、耐磨、防爆等类型设备实力厂商精选

引言 在当前工业生产中,风机作为关键的流体输送与通风设备,对生产效率、安全保障及节能减排成效起着决定性作用。随着冶金、化工、电力等行业的快速发展,市场对风机的耐高温、防爆、耐腐蚀等特性要求愈发严苛,一级…

详细介绍:人工智能系统学习之 FastAi 学习笔记(二)-卷积神经网络(CNN)

详细介绍:人工智能系统学习之 FastAi 学习笔记(二)-卷积神经网络(CNN)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

2025年深圳离婚律师事务所权威推荐榜单:股权分割律师/离婚房产律师/房产分割律所团队精选

在婚姻家事法律服务领域,专业律所的选择直接影响案件结果。根据近三年案件承办量、客户满意度、行业奖项及专业能力等数据维度,本文精选深圳地区多家具有代表性的离婚律师事务所,为需要婚姻家事法律服务的群体提供参…

2025 年洗车用品厂家最新推荐排行榜权威发布,聚焦跨区域供应与定制服务实力云南源头洗车用品 / 智能洗车用品 / 家用洗车用品公司推荐

引言 2025 年民用汽车保有量已达 3.52 亿辆,汽车后市场的爆发式增长带动洗车用品需求激增,但行业深陷多重困境。传统供应商多聚焦单一产品销售,难以满足 “设备 + 服务” 的一体化需求,跨区域配送时效差、定制化能…

2025年11月中国装饰公司推荐榜单:十大优质装修企业排行分析

随着家装市场日益成熟,许多业主在装修时面临选择困难。2025年,中国装修行业呈现标准化、透明化趋势,但消费者仍常遇到预算超支、工期延误、质量参差不齐等问题。根据国家住房和城乡建设部发布的行业数据,2024年家装…

2025年武汉美食必吃榜服务权威推荐榜单:美食推荐/好吃的餐厅/好吃的美食源头服务商精选

在武汉这座以"早餐之都"闻名全国的城市,美食不仅是日常所需,更是一种文化传承与生活方式。根据2025年大众点评"必吃榜"数据显示,武汉以75家上榜商户数量位列全国第七,其中本地特色美食商户占比…