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

CF1536C Diluc and Kaeya - crazy-

CF1536C Diluc and Kaeya

题意

题目传送门

给你一个字符串 \(S\),其中只包含 'K' 或 'D' 两种字符,要求划分这个字符串使得各部分的 \(n(D):n(K)\) 相同,其中 \(n(D)\) 表示 \(S\) 中字符 'D' 出现的个数,最大化划分后形成的组数。

求出 \(S\) 的所有前缀中的上述答案。

思路

注意到,如果到了第\(i\)个位置,且当前的比为\(a:b\),而存在一个\(j \in [1,i)\),也满足那个前缀的比为\(a:b\),那么两个比就可以合并为一个,和就是说\(ans_i=ans_j+1\)

所以,我们只需要存储在\(a:b\)条件下,最大的\(j\)是多少,然后加一并更新就好

这里可以用一个pair存储比值,避免直接除的误差问题

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int Maxn=5e5+10;
char s[Maxn];
int ans[Maxn];
int n,nd,nk;
void run()
{map<pair<int,int>,int>f;nd=nk=0;cin>>n>>(s+1);memset(ans,0,(n+3)*4);for(int i=1;i<=n;i++){if(s[i]=='D') nd++;else nk++;int g=__gcd(nk,nd);pair<int,int> p=make_pair(nd/g,nk/g);if(f[p]) ans[i]=++f[p];else ans[i]=f[p]=1;}for(int i=1;i<=n;i++) cout<<ans[i]<<" ";cout<<endl;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin>>t;while(t--) run();system("echo. & pause");return 0;
}
http://www.jsqmd.com/news/88822/

相关文章:

  • JavaScript 源代码的 AST 转换:Babel 插件是如何改变你编写的代码的?
  • 2、UNIX基础入门教程
  • 2025年男孩取名机构推荐:2025年专业取名机构权威榜单TOP5深度解析 - 十大品牌推荐
  • 2025年互联网行业:AI技能+CAIE认证打造核心竞争力
  • CF1538F Interesting Function - crazy-
  • 2025年男孩取名机构推荐:权威取名机构榜TOP5深度解析 - 十大品牌推荐
  • 快速排序的理解与实践(c语言实现)
  • 3、学习 UNIX 的额外资源
  • Open-AutoGLM 实战:手把手教你用 AI 做App自动化测试「喂饭教程」
  • 6、互联网通信全解析:从邮件到多媒体的多元世界
  • 含分布式电源配电网潮流计算及相关实践
  • CF1542B Plus and Multiply - crazy-
  • React 新手村通关指南:状态、组件与魔法 UI
  • 7、UNIX 外壳:从基础到高级编程的全面指南
  • CF1545A AquaMoon and Strange Sort - crazy-
  • 8、深入了解Bash:功能、安装与使用指南
  • 动态规划01背包问题
  • 停止造Agent,开始造Skills吧!Claude Skills创造者:Agent聪明但不够专业,非技术人员也能造Skills
  • 面向对象程序设计——第二章作业总结
  • 如何理解:“模型训练编排” 是 AI 创新的关键 ?
  • 2025年男孩起名机构推荐:权威起名榜单TOP5深度解析 - 十大品牌推荐
  • 游戏中的开发模式有哪些?一篇带你了解常用的设计模式!<二>
  • 【Python】conda更换国内镜像源
  • 父子进程关系与终止机制详解
  • 2025年起名改名机构推荐:权威榜TOP5机构深度解析 - 十大品牌推荐
  • 2025年生辰八字起名机构推荐:权威榜TOP5机构深度解析 - 十大品牌推荐
  • Product Hunt 每日热榜 | 2025-12-14
  • 2025年生辰八字起名机构推荐:权威TOP5机构深度解析 - 十大品牌推荐
  • SpringCould —— 网关详解
  • 实验实验实验