当前位置: 首页 > news >正文

题解:qoj17158 Palindromes

题意:给出 \(l,n,mod\) 和一个序列 \(a\),表示现在有一个 \(l\) 长由 \(a,b\) 构成的字符串,要求 \(a_1,a_2\cdots a_n\) 长的前缀都是回文串,问有多少种。\(l\le 10^9,n\le 5\times 10^5\)

做法:

首先算个数就是先算连通块个数,然后就可以快速幂直接计算。重点是怎么计算。

我们先考察两个限制 \(x>y\),如果 \(x\ge 2y\),那么意味着 \((2y,x-2y]\) 这一部分没有限制了,只有单独的这一部分要回文,那么有 \(\lceil\frac{x}{2}\rceil-y\) 的贡献。

否则考虑 \(x<2y\),那么我们可以瞎对称两下,你会发现我们把 \(x\) 替换成 \(2y-x\) 具有等价的效果,然后我们去写几项看一看,会发现 \((x,y)\) 在有数比第三大数 \(z\) 小之前,每次等同于把两个数同时减掉 \(d=y-x\),那么我们就可以除法加速这个过程,然后再判断最后的 \(x,2y\) 的关系,如果 \(x\ge 2y\) 那么有贡献,否则我们令 \(x,y\) 都减去 \(d\) 再扔回去。

但是这样有个问题,我们该怎么样保证扔回去的次数并不多呢?我们考虑当我们扔回去之后,大概序列从大到小会形如一个 \(x,z,y\) 的形态,考虑 \(z\) 的位置,如果 \(z\ge \frac{x+y}{2}\),那么最大值减次大值之差会减半,否则如果 \(2z\le x\),显然 \(z,y\) 也满足差减半,如果还是丢回去的情况,那应该形如 \(z,y,2z-x\),发现此时 \(y,z\) 相比于 \(x,y\) 会减半,可以在数轴上画一画讨论一下,所以这个扔回去的操作是只有 \(O(\log n)\) 次的。

所以直接用堆维护一下就可以,复杂度 \(O((n+\log n)\log n)\)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5e5 + 5;
int n, m, l, a[maxn], ans;
priority_queue<int> q;
int qpow(int x, int k, int p) {int res = 1;while(k) {if(k & 1)res = res * x % p;x = x * x % p, k >>= 1;}return res;
}
signed main() {cin >> l >> n >> m;for (int i = 1; i <= n; i++)cin >> a[i], q.push(a[i]);q.push(0);ans += l - q.top();while(!q.empty()) {int x = q.top(); q.pop();if(x == 0)break;while(q.top() == x)q.pop();//	cout << x << " " << q.empty() << endl;int y = q.top();if(x >= 2 * y) {ans += (x + 1) / 2 - y;continue;}q.pop();//cout << y << endl;int z = q.top();int d = (y - z) / (x - y), t = x - y;x -= t * d, y -= t * d;if(x >= 2 * y) {ans += (x + 1) / 2 - y;q.push(y);continue;}else {cout << x << " " << y << endl;q.push(x - t), q.push(y - t);continue;}}cout << qpow(2, ans, m) << endl;return 0;
}
http://www.jsqmd.com/news/410162/

相关文章:

  • 对比一圈后!全网顶尖的AI论文软件 —— 千笔ai写作
  • 咖啡师考证优选:2026年市场认可的培训机构推荐,手磨咖啡机售卖/咖博士咖啡机售卖,咖啡师考证推荐榜单推荐排行榜单 - 品牌推荐师
  • 2026年知名的传动锻件/河北传动锻件行业内口碑厂家推荐 - 品牌宣传支持者
  • 学长亲荐!降AI率软件 千笔 VS 灵感风暴AI,专科生专属
  • 开题卡住了?千笔·专业论文写作工具,本科生写作利器
  • AI论文生成助手哪个好?6款写论文的AI工具,一键生成优质论文! - 掌桥科研-AI论文写作
  • 聊聊2026年黑龙江比较不错的西点学校,哪家性价比高? - 工业推荐榜
  • 2026年靠谱的唐山小户型全屋定制/唐山儿童房全屋定制怎么联系供应商推荐 - 品牌宣传支持者
  • 2026年评价高的晋中招牌菜饭店/老字号风味饭店回访率高推荐 - 品牌宣传支持者
  • 超简单!Python爬虫实战:爬取B站UP主视频数据,分析账号运营
  • 开源任务管理工具!一款自托管的全能待办协作工具!
  • 【Matlab】MATLAB教程:xlswrite写入Excel——指定sheet写入与表格数据保存实操详解
  • 2026年口碑好的唐山别墅大宅定制家具/唐山卧室收纳定制家具如何选生产商推荐(精选) - 品牌宣传支持者
  • 零基础必学!Python爬虫实战:爬取天气预报,自动保存近7天天气+温度+风力
  • 2026年质量好的珍珠棉片材/覆膜珍珠棉厂家信誉综合参考 - 品牌宣传支持者
  • 新手友好!Python爬虫实战:爬取百度贴吧帖子,自动提取标题+正文+评论,保存为MD文件
  • GitHub 热榜项目 - 日榜(2026-02-25)
  • AI论文生成助手哪个好?2026年6款AI论文生成神器排行榜,一键解锁论文方向! - 掌桥科研-AI论文写作
  • HoRain云--Python语法错误排查:快速解决SyntaxError
  • python-flask新闻信息收集程序设计Pycharm vue django
  • 2026年比较好的低压储气罐/国内储气罐高评价厂家推荐 - 品牌宣传支持者
  • 【Matlab】MATLAB教程:fprintf写入文本——格式化写入txt与计算结果保存实操详解
  • HTTP/2 与 HTTP/3 请求走私:协议降级、隧道与应用层规避实战
  • 毕业设计答辩全流程指南:PPT 结构设计与答辩策略实战
  • 2026年知名的全钢工业洗衣机/洗衣机厂家用户好评推荐 - 品牌宣传支持者
  • Opencv 学习笔记:距离变换(DIST_L1 算法实战 + 归一化)
  • 深入底层:Qt 源码中那个“除以零”的宏定义神技
  • 豆包超能模式:全能AI助手的全新体验
  • AI写论文有妙招!4款AI论文生成工具,让写科研论文更高效!
  • 流量指纹混淆终极指南:模拟主流浏览器与合法应用的 TLS 指纹 (JA3/JA4) 实战