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

Decode

 计数问题。

考虑纯暴力写法:

    string s; cin>>s; int n=s.size(); s=' '+s; int ans=0; for(int l=1;l<=n;l++)for(int r=l;r<=n;r++)for(int i=l;i<=r;i++)for(int j=i;j<=r;j++)if(count(begin(s)+i,begin(s)+j+1,'1')==count(begin(s)+i,begin(s)+j+1,'0'))ans++; cout<<ans<<endl; 

O(n^5)的复杂度,复杂上天。

考虑L=1,R=n时,满足条件的(x,y)对数的优化写法:

vector<int>pre(n+10); 
for(int i=1;i<=n;i++)
pre[i]=(pre[i-1]+(s[i]=='1'?1:-1)); 
map<int,int>cnt; 
int ans=0; 
for(int i=1;i<=n;i++){ans+=cnt[pre[i]]; cnt[pre[i]]++;
}

复杂度O(nlogn)。

再根据乘法原理 ,可以进一步处理所有[L,R]下(x,y)的对数。

#include<bits/stdc++.h>
using namespace std;
void __p(int x) {cerr<<x;}
void __p(long long x){cerr<<x;}
void __p(long double x){cerr<<x;}
void __p(double x){cerr<<x;}
void __p(string s){cerr<<s;}
void __p(char s){cerr<<s;}
void _print(){cerr<<"]\n";}
template<typename T,typename... V>//定义类模版
void _print(T t,V... v){__p(t);if(sizeof...(v))cerr<<",";_print(v...);}
#define debug(x...) cerr<<"["<<#x<<"] = ["; _print(x);
#define see1 cout<<"-------------\n";
#define see2 cerr<<"-------------\n";
#define io ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long 
#define double long double
#define sqrt sqrtl
/*1.进行移位运算时, 1ll<<n ,1后面不要忘了ll否则会溢出
2.数组开太大放到外面,作为全局数组
3.dfs递归深度超过几千层可能会溢出
4.accumulate(begin(a),end(a),0LL); 
*/
const int p=1e9+7; void solve()
{string s; cin>>s; int n=s.size(); s=' '+s; vector<int>pre(n+10); for(int i=1;i<=n;i++)pre[i]=pre[i-1]+(s[i]=='1'?1:-1); int ans=0; map<int,int>cnt; for(int i=0;i<=n;i++){ans=(ans+cnt[pre[i]]*(n-i+1))%p;cnt[pre[i]]=(cnt[pre[i]]+i+1)%p; }cout<<ans<<endl; 
}  signed main()
{ioint t=1;cin>>t; while(t--){solve();}
}for(int i=1;i<=n;i++)
pre[i]=(pre[i-1]+(s[i]=='1'?1:-1)); 
int ans=0; 
for(int i=0;i<=n;i++){ans=(ans+cnt[pre[i]]*(n-i+1))%p;cnt[pre[i]]=(cnt[pre[i]]+i+1)%p;
}
cout<<ans<<endl; 

25/4/30

相关文章:

  • OpenAI 2025 4月最新动态综述
  • 【Unity】如何解决UI中的Button无法绑定带参数方法的问题
  • 《机器学习中的过拟合与模型复杂性:理解与应对策略》
  • 关于 MCP 的理论知识学习
  • HAproxy+keepalived+tomcat部署高可用负载均衡实践
  • buildroot 和 busybox 系统的优缺点
  • vue2中如何自定义指令
  • 最新DeepSeek-Prover-V2-671B模型 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)
  • C++继承(下)
  • 监听滚动事件
  • Ubuntu平台使用aarch64-Linux交叉编译opencv库并移植RK3588S边缘端
  • 新手小白如何查找科研论文?
  • Nginx匹配规则详细解析
  • 快充诱骗协议芯片的工作原理及应用场景
  • Python3(19)数据结构
  • [SystemVerilog] Enum
  • UDP/TCP协议知识及相关机制
  • 【使用小皮面板 + WordPress 搭建本地网站教程】
  • 私有知识库 Coco AI 实战(五):打造 ES 新特性查询助手
  • 线上婚恋相亲小程序源码介绍
  • 市场监管总局出手整治涉企乱收费,聚焦政府部门及下属单位等领域
  • 揭秘神舟十九号返回舱“软着陆”关键:4台发动机10毫秒内同时点火
  • 美参议院通过新任美国驻华大使任命,外交部回应
  • 金砖国家外长会晤发表主席声明,强调南方国家合作
  • “杭州六小龙”的招聘迷局
  • 华侨城A:一季度营收53.63亿元,净利润亏损14.19亿元