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

CF2069E A,B,ABandBA TJ

这个先将永远不可能分到一起的AA,BB分开

后面的形式只有:

A,B,n个AB,n个BA,A加n个BA,B加n个AB

所以先把A,B分了

然后发现用AB,BA肯定不劣于用A,B(代价一消耗掉了两个字符)

于是优先使用AB,BA

对于每一个分割出来的字符串

按奇偶分

偶数形如:"ABABAB","BABABA"

ABABAB : AB/AB/AB,A/BABA/B,A/B/AB/A/B

BABABA : BA/BA/BA,B/ABAB/A,B/A/BA/B/A

观察到以A开头的先选用AB肯定选的要比BA多 于是先把能用的AB都用了 如果有剩下的 再用BA 如果还有剩的 就直接用A,B填上

B开头同理

奇数:"ABABA","BABAB"

ABABA : A/BABA,ABAB/A

BABAB : B/ABAB,BABA/B

观察到以A开头的必然会有一个落单的A 所以先减去 B同理

然后剩下的不管是A开头还是B开头 都有可能是AB或者BA的情况

于是这个时候我们就看选AB更好还是选BA更好

直接比较二者大小 先选大的 有剩余用小的补 还有就用A,B补

最后判断A,B的数量够不够用来补前面AB,BA弄不上的就行了

#include<bits/stdc++.h>
using namespace std;
string s,k,d;
int t,a,b,ab,ba;
struct node{string st;};vector<node>case2,case3;
bool cmp(node a,node b){return a.st.size()<b.st.size();}
void init(){case2.clear(),case3.clear(),k="",d="";}
void solve(){init(),cin>>s,cin>>a>>b>>ab>>ba,s+=s[s.size()-1],d+=s[0];for(int i=1;i<s.size();i++){if(s[i]==s[i-1]){if(d=="A")a--;else if(d=="B")b--;else if(d.size()&1)case3.push_back({d});else case2.push_back({d});d=k;}d+=s[i];}sort(case2.begin(),case2.end(),cmp),sort(case3.begin(),case3.end(),cmp);for(node v:case2){string d=v.st;if(d[0]=='A'){int ds=d.size()/2; if(ab>=ds)ab-=ds;else{ds-=ab,ab=0;if(ba>=ds-1&&ds!=1)ba=ba-ds+1,a--,b--;else if(ds!=1)ds=ds-ba,ba=0,a-=ds,b-=ds;else a--,b--;}}else{int ds=d.size()/2; if(ba>=ds)ba-=ds;else{ds-=ba,ba=0;if(ab>=ds-1&&ds!=1)ab=ab-ds+1,a--,b--;else if(ds!=1)ds=ds-ab,ab=0,a-=ds,b-=ds;else a--,b--;}}}for(node v:case3){string d=v.st;if(d[0]=='A')a--;else b--;int ds=d.size()/2;if(ab>ba){if(ab>=ds)ab-=ds;else{ds-=ab,ab=0;if(ba>=ds)ba-=ds;else ds-=ba,ba=0,a-=ds,b-=ds;}}else{if(ba>=ds)ba-=ds;else{ds-=ba,ba=0;if(ab>=ds)ab-=ds;else ds-=ab,ab=0,a-=ds,b-=ds;}}}if(a>=0&&b>=0)cout<<"YES"<<endl;else cout<<"NO"<<endl;
}
signed main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>t;while(t--)solve();
}
http://www.jsqmd.com/news/425221/

相关文章:

  • Windows写字板的用途
  • springboot+vue3仓库租赁管理系统
  • 2月27日
  • 西门子200指针:多程序要求下的平均值、最大值和最小值计算,全面注释
  • springboot+vue3公共运动场地预约管理系统
  • Eureka在大数据领域的监控指标解读
  • 「UOJ 136」开学前的作文 TJ
  • 「CF505E」 Mr. Kitayuta vs. Bamboos TJ
  • 基于yolov11+django+deepseek的火灾检测系统带登录界面python源码+onnx模型+精美web界面
  • springboot+vue3公务用车调度管理平台
  • 「CF521D」 Shop TJ
  • springboot+vue3基于 Java 的长途汽车客运站售票购票系统
  • 兰亭妙微作品一青海鸟类资源库网站交互及UI设计
  • 大数据领域Zookeeper与Flink的集成应用案例
  • Wi-Fi 7部署10大最常见的坑
  • springboot+vue3基于Java的高校教材订购系统
  • AI应用架构师踩坑记:科研AI智能体与超级计算集成的8大血泪教训
  • springboot+vue3服装商城销售管理系统
  • Windows powerToys映射键位
  • AT_arc209_d [ARC209D] A_A_i
  • Windows画图工具介绍
  • 三月做题集
  • 兰亭妙微作品一青海鸟类资源库网站交互及UI设计 - ui设计公司兰亭妙微
  • 手把手教你用6款AI论文神器,一键极速生成超长篇幅论文 - 麟书学长
  • nodejs+php+vue儿童慈善捐赠管理系统的设计与实现有
  • 2000-2024年地级市市场化水平面板数据
  • WPF实现相机标定
  • 告别传统风控!AI应用架构师详解:金融AI风险预警的4大技术颠覆与架构转型
  • Java基于springboot+vue的智慧医疗采购系统
  • 题解:uoj1015 【ULR #3】我的 XOR 卷积人生