D - Three Days Ago (atcoder.jp)

这个题可以用到二维优化。首先这个题的题意是:

我们要找到符合条件的子字符串满足

1 <= l <= r <= N(字符串长度),然后这个子字符串可以通过重新排列来重新规划顺序,所以我们只需要让这个字符串中的字符数量相等就行了。

我们可以用到二维表示以及用到异或的一些性质。我们首先开一个 2 ^ 10 的数组  1 << 10 即可,其中的每一位都表示从 0 开始到 9 的一个数字。首先我们设置一个 now 变量,用来存我们当前的值,然后我们遍历这个字符串,对于每个字符,我们让 now 变量来与这个数的二进制表示进行异或,然后由于异或中如果两个数出现偶数次,那必定是 0 ,或者是 1 ,然后我们可以查找之前是否出现过这样的情况,这两种情况中的就一定是每一个数都出现偶数次,所以我们直接让答案加上 dp[now] 就行了, 然后这种情况又出现了一次,所以 dp[now] ++, 并且不要忘了 dp[0] = 1,因为也有可能会出现从一开始每一个数都出现两次,所以这种情况也是成立的。

代码如下:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int dp[1 << 10];
signed main() {ios::sync_with_stdio(false);cin.tie(nullptr);string s; cin >> s;dp[0] ++;int now = 0;int ans = 0;for (char c : s){now ^= 1 << (c - '0');ans += dp[now] ++;}cout << ans << "\n";return 0;
}

最新文章

  1. matlab 2012 vs2010混合编程
  2. matlab三角定位分析程序,Matlab chi2gof 分布分析程序求教
  3. 漏洞: RHSA-2017:3075: wget security update
  4. Angular 条件指令 ngIf 的一个例子
  5. 一张图看懂阿里云智能媒体管理产品
  6. 扫地机器人什么牌子好?2021最新扫地机器人排行榜
  7. 卸载Oracle数据库(有图有真相)
  8. 如何卸载IE7重装IE6
  9. glibc版本查看_[译] 写一个简单的内存分配器(替换glibc中的malloc函数)
  10. 面向对象设计思想_重要_2
  11. tomcat启动报错:Address already in use: JVM_Bind
  12. Wechat协议初探
  13. 查看服务器显卡运行状况
  14. MapReduce之Partition分区实例操作
  15. PMP考试如何获取PDU
  16. 使用 Chrome DevTools 模拟缓慢的 3G 网络速度
  17. 动态规划(2.2)背包问题扩展
  18. quickbooks php 开发,通过odbc与PHP连接到quickbooks数据库?
  19. 【关于如何自行下载Unity中文文档的说明】
  20. 计算机小写换大写函数,在Excel中将金额从小写转换为大写以在Excel RMB中自动将金额大写的三种方法...

热门文章

  1. 【转载】2019 年,国内博士后的招聘要求和待遇是怎样的?
  2. 快速入门Mybatis初学笔记(二)
  3. 如何在VMware里安装windows server 2003
  4. html并集选择器怎么写,css案例学习之并集选择器
  5. 普氏分析在生信中的应用
  6. 在伯克利学计算机,2019加州大学伯克利分校计算机专业申请要求
  7. CA6140车床法兰盘零件机械加工工艺规程及钻3-11 孔工序专用夹具设计
  8. 存储之Block-MultiQueue机制详解(二)
  9. 二维动画后期制作的要点
  10. 勒索软件攻击创新高,邮件安全需警惕