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

[SYSUCPC 2025] Gray Transform (Weakened)

同步发布于 here。

用树状数组优化了一下的解法。虽然我也不知道优没优化

做法

首先这个格雷码明显可以预处理。

然后对于一次操作一,因为我们 \(\sum m \le 5000\),所以其实我们直接暴力的枚举就可以了,但是我复杂度算错了,以为成了 \(O(q^22^n)\),那肯定过不了啊,然后我就写了一个 BIT,这样优化到了我以为的 \(O(q^2 n)\),实则应该是 \(O(q n)\)

具体实现就是我们用 BIT 维护 \([1,2^{k_i} - 1]\) 区间的修改次数,因为格雷码 \([2^n,2^{n+1} - 1]\) 是有环的,我们就可以在环中去做,这样我们求出对应的修改次数后模环长后暴力修改的时间复杂度也是对的。

有人会说题目中不是说要求 \(a_j < 2^{k_i}\) 才修改吗,但是我们的循环节最大的位置是到 \(2^n-1\) 的,所以如果一个位置被修改则这个位置一定在下一次有 \(j < 2^{k_i}\) 还能被修改。

对于操作二我们就如上面所说求一下第 \(i\) 个点的修改次数,对环长取模后暴力修改即可,时间复杂度 \(O(q 2^ n)\)

时间复杂度应该是 \(O(2^n + q n + q 2^n)\)

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int N = 1e6 + 66;
int n, m;
vector<int> v[N];
int a[N];
struct BIT{int tr[N];int lowbit(int x){return x & -x;}void add(int x, int v){for(;x <= n;x += lowbit(x)) tr[x] += v;}ll query(int x){int res = 0;for(;x;x -= lowbit(x)) res += tr[x];return res;}
}b;//树状数组
int ck(string s)//二进制转十进制
{int res = 0, p = 1;for(int i = s.size() - 1;i >= 0;i --, p *= 2) res += (s[i] - '0') * p;return res;
}
string ckk(int x)//十进制转二进制
{string s;if(x == 0) s = "0";while(x) s += (char)(x % 2 + '0'), x /= 2;reverse(s.begin(), s.end());return s;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);v[1] = {0, 1};for(int i = 2;i <= 10;i ++){int p = 1 << i - 1;v[i] = v[i - 1];//前面的和 n-1 一样for(int j = v[i - 1].size() - 1;j >= 0;j --) v[i].push_back(v[i - 1][j] + p);//后面的按题意模拟}//预处理格雷码cin >> n >> m;n = 1 << n;for(int i = 0;i < n;i ++) a[i] = i;while(m --){int op, l, x;cin >> op;if(op == 1){cin >> l;for(int i = 1;i <= l;i ++){cin >> x;x = 1 << x;//实际下标b.add(1, 1);b.add(x, -1);//差分}}else {string s;cin >> s;l = ck(s);x = b.query(l);//修改次数x %= 1 << ((int)log2(l) + 1);//实际要走的步数int ans = a[l];//原位置while(x --) ans = v[10][ans];//直接在最大的格雷码上走就可以了,因为前面都是一样的cout << ckk(ans) << '\n';}}return 0;
}
http://www.zskr.cn/news/1436465.html

相关文章:

  • 2026降AIGC突围战:降AIGC工具实测TOP榜与安全选型攻略
  • Playnite插件生态:5种改变游戏库管理体验的扩展方案
  • 【算法分析与设计】第26篇:参数化算法与固定参数可解性理论
  • 咸阳志高空调维修加冷媒电话|人民中路老牌专业上门维修 - GrowthUME
  • 祁门县26年最新奢侈品名包名表专业回收权威店铺推荐 - 莘州文化
  • CSDN AI数字营销博客模板测评:我的真实体验与价值分析
  • 2026 连云港长途搬家公司权威榜单发布,大富豪搬家稳居榜首 - 资讯纵览
  • Gemini API成本暴增预警!4类高频误用模式致账单飙升300%,附Google Cloud优化配置快照
  • 基于LoRa与GPS的物联网追踪器:从硬件选型到低功耗部署实战
  • 潜山市26年最新奢侈品名包名表专业回收权威店铺推荐 - 莘州文化
  • 毕业论文神器!2026年真正好用的专业AI论文工具
  • LinkSwift:深度解析九大网盘直链下载助手的技术架构与高效部署指南
  • 咸阳美的空调售后维修电话|人民中路专业老店快速上门 - GrowthUME
  • 神秘推性质
  • Arduino与伺服马达制作简易互动宠物:从原理到实践
  • VMware macOS解锁神器:3步开启苹果系统虚拟化之旅
  • 抖音音乐下载终极指南:免费开源工具实现批量处理与高效管理
  • 告别Windows字体丑!3步获取苹果苹方字体提升文档颜值
  • AI应用的质量保障:从测试到监控的完整流程
  • 电路设计入门:从原理图到PCB,手把手教你制作可调光LED灯
  • 【限时解禁】Gemini韩文多音节动词时态识别盲区(独家逆向Token映射表),首批领取仅剩87份
  • OCR + 大模型融合方案
  • 基于Arduino与L293D的直流电机PWM调速与光控系统设计
  • Gemini内容日历规划实战指南:从零搭建可复用、可度量、可迭代的智能排期系统
  • Arduino对接SICK磁条传感器:CANopen协议解析与AGV磁导航实现
  • Sunshine游戏串流服务器:如何构建跨平台低延迟游戏串流系统
  • NTP电子时钟用在哪里最合适?这几个场合天天见!
  • 从文本到电影级视频只需8秒?——揭秘下一代多模态时空建模架构(含3项未公开专利路径)
  • AI客服聊天记录优化:从全量加载到游标分页
  • 从石英振荡到TDA7294功放:深入拆解一个400Hz中频电源的每个电路模块