随笔 - 58,  文章 - 0,  评论 - 4,  阅读 - 3296

一、题目描述:

  给你一个由数字 0~9 组成的字符串,长度为 n(1n5e5)。求出满足 1lrn 且在 l~r 区间内所有数字都出现了偶数次的整数对 l,r 有多少对。


二、做题思路:

  Atcoder 不会卡你的时间,所以这题应该是 O(n) 的时间复杂度。

  用二进制表示从 1~n 每个数出现的次数,奇数为 1,偶数为 0那我们便可以用一个 sum 数组来表示从 1~n 的数字状态。

  如果两个位置的状态相同,则说明他们之间的字串是满足条件的,统计答案即可。时间复杂度 O(n)


三、完整代码:

复制代码
 1 #include<iostream>
 2 #define ll long long
 3 using namespace std;
 4 string s;
 5 ll n,ans,sum[500010],num[1<<10];
 6 int main()
 7 {
 8     cin>>s;
 9     num[0]=1;
10     n=s.length();
11     for(ll i=0;i<n;i++)
12     {
13         sum[i+1]=sum[i]^(1<<s[i]-'0');
14         ans+=num[sum[i+1]];
15         num[sum[i+1]]++;
16     }
17     cout<<ans<<'\n';
18     return 0;
19 }
复制代码

四、写题心得:

  其实没什么心得,比赛的时候一直想不出来 ( 我一个同学 5 分钟就切掉了 ) 。好烦啊,不过幸好没掉分qwq。所以还是加油吧!拜拜!

posted on   trh0630  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示