ad1 广告
 
收藏文章 楼主

2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略

版块:网络百科   类型:普通   作者:某个人   查看:9   回复:0   获赞:0   时间:2025-06-10 15:05:20

2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略 GESP七级 洛谷P11965 等价消除 位运算 哈希表 第1张


一、题目解读

    2025年GESP七级考试中的“等价消除(洛谷P11965)”问题要求统计给定字符串中满足等价条件的子串数量。所谓“等价子串”,是指子串中所有字符出现的次数均相同。题目需要高效算法解决,考验对字符串处理和状态压缩的掌握。

二、解题步骤

    1. 初始化:定义哈希表stateCount,初始状态mask=0(空串)计数为1。

    2. 遍历处理:

        对每个字符,通过mask ^= (1 << (s[i] - 'a'))更新状态(异或操作实现字符添加/删除)。

        查询stateCount[mask]获取当前状态的出现次数,累加到答案。

        更新哈希表stateCount[mask]++。

    3. 结果输出:返回累计的等价子串总数。

三、代码与注释

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

// 核心函数:统计等价子串数量
long long countEquivalentSubstrings(const string& s) {
   int n = s.size();
   long long count = 0;          // 答案计数器
   unordered_map<int, int> stateCount; // 记录状态出现次数
   stateCount[0] = 1;           // 空串状态初始化为1
   int mask = 0;                // 当前子串状态(二进制位表示)

   for (int i = 0; i < n; ++i) {
       mask ^= (1 << (s[i] - 'a'));  // 异或更新状态(字符转位操作)
       count += stateCount[mask];    // 累加已有状态的子串数
       stateCount[mask]++;          // 更新状态计数
   }

   return count;
}

int main() {
   ios::sync_with_stdio(false);
   cin.tie(nullptr);
   
   int n;
   string s;
   cin >> n >> s;   // 输入(题目可能有多组数据,但此处简化)
   cout << countEquivalentSubstrings(s) << endl;
   return 0;
}

原文:2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略

 
ad1 广告位8,870 x auto
回复列表
默认   热门   正序   倒序

回复:2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略

Powered by 免费外链论坛

©2015 - 2025 免费外链论坛

免费外链论坛 免费发布外链 发外链平台Sitemap

您的IP:216.73.216.80,2025-06-17 06:00:18,Processed in 0.01818 second(s).

备案信息:浙ICP备2024090696号

声明:本站内容为用户自主发布,不对其内容真实性负责,虽然本站会一一审核,但能力有限,如您发现违规内容,请及时联系管理员。

主页

欢迎您的浏览

QQ联系图标

自助查询

99%的问题都能找到答案

联系站长

工作时间:9:00~17:30

微信二维码

回到顶部

向上滚动到顶部

个人中心

去个人首页看看吧

转到底部

向下滚动到底部

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息