CF 155C. Hometask 思维+模拟.
来源:互联网 发布:linux系统zip命令 编辑:程序博客网 时间:2024/05/17 05:15
题意:给出一个字符串s,k个二元组.二元组(a,b)表示字符a和字符b在字符串中不能相邻.(每个字符最多出现在一个二元组中).
|s|<=1e5,k<=13.问要使字符串s合法 最少需要删除多少个字符.
先把相邻相同的都合并在一起.现在字符串为:a[1],x,y,a[4],a[5]....
|s|<=1e5,k<=13.问要使字符串s合法 最少需要删除多少个字符.
先把相邻相同的都合并在一起.现在字符串为:a[1],x,y,a[4],a[5]....
现在如果某个区间 出现:w,xyxyxyx,z (x,y)为矛盾 则要合法:删除该区间所有x或者删除该区间所有的y. 且删除后不会和相邻的产生矛盾.
#include <bits/stdc++.h>#define se second#define fi firstusing namespace std;typedef long long ll;typedef pair<char,int> ii;const int N=2e5+5,M=130;char s[N];vector<ii> a;int k,f[M],ban[M][M],vis[N]; void init(){for(int i=1,j;s[i];i=j){j=i+1;int cnt=1;char c=s[i];for(;s[j];j++)if(s[j]==c)cnt++;elsebreak;a.push_back(ii(c,cnt));}}int main(){scanf("%s%d",s+1,&k);init();char x,y;for(int i=1;i<=k;i++){cin>>x>>y;ban[x][y]=ban[y][x]=1;}int ans=0; for(int i=0,j;i<a.size()-1;i=j){ int x=a[i].fi,y=a[i+1].fi; int cx=a[i].se,cy=a[i+1].se; if(ban[x][y]) { for(j=i+2;j<a.size();j++) { if((j-i)%2){if(a[j].fi!=y)break;cy+=a[j].se;} else{if(a[j].fi!=x)break;cx+=a[j].se;}}ans+=min(cx,cy); } else j=i+1;}cout<<ans<<endl;return 0;}
阅读全文
0 0
- CF 155C. Hometask 思维+模拟.
- Codeforces 155C Hometask【思维+Dp】
- Codeforces 155 C. Hometask
- Codeforces Round #109 (Div. 2)-C. Hometask-思维
- CF 214 B Hometask.cpp
- codeforces C. Hometask(贪心)
- CF 345 C 模拟
- CF 461C 模拟
- cf 305 C(模拟)
- cf 260 C(模拟)
- cf 681 C(模拟)
- cf 433 C(思维题)
- cf 599 C (模拟+STL)
- CF - 724C 模拟 + STL
- CF 19C 思维题STL应用
- cf #334 C. Alternative Thinking (思维题)
- CF 551c 二分搜索+思维题
- CF round 355 C题 思维
- Django项目-数据库,模型创建
- Dubbo第一章:Dubbo-admin编译和Dubbo简单入门
- java、javascript、js、jsp的区别
- elasticsearch-索引性能优化技巧
- BZOJ1562: [NOI2009]变换序列(匈牙利算法,字典序相关)
- CF 155C. Hometask 思维+模拟.
- [ubuntu]安装配置jdk和eclipse新建 工程
- Oracle truncate、 delete、 drop区别
- [work]tensorflow Windows 安装
- 教你微信刷票怎么刷之微信刷票投票的方法『图文』
- IP/TCP/UDP 包头
- UE4踩坑总结
- java try-catch-finally的执行顺序
- 可变参数列表解析