CF 155C. Hometask 思维+模拟.
2017-12-10 17:49
316 查看
题意:给出一个字符串s,k个二元组.二元组(a,b)表示字符a和字符b在字符串中不能相邻.(每个字符最多出现在一个二元组中).
|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 first
using namespace std;
typedef long long ll;
typedef pair<char,int> ii;
const int N=2e5+5,M=130;
char s
;
vector<ii> a;
int k,f[M],ban[M][M],vis
;
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++;
else
break;
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;
}
|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 first
using namespace std;
typedef long long ll;
typedef pair<char,int> ii;
const int N=2e5+5,M=130;
char s
;
vector<ii> a;
int k,f[M],ban[M][M],vis
;
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++;
else
break;
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;
}
相关文章推荐
- CF 782D. Innokenty and a Football League 贪心,思维,模拟
- CF - 789B. Masha and geometric depression - 暴力+模拟/思维
- CF - 652A. Gabriel and Caterpillar 模拟+思维
- Codeforces 155C Hometask【思维+Dp】
- CF - 782D. Innokenty and a Football League - 模拟+思维+贪心+dfs插入
- CF - 799A. Carrot Cakes - 暴力+模拟
- 【打CF,学算法——二星级】CodeForces 292A SMSC (模拟)
- CF - 812A. Sagheer and Crossroads - 模拟
- HDU 5533 Dancing Stars on Me (暴力模拟+思维)
- 671B(正常模拟,思维)
- CF D. Population Size(贪心+模拟)
- BZOJ 1088: [SCOI2005]扫雷Mine【思维题,神奇的模拟+枚举】
- [CF Skills]如何编程模拟用户的触屏操作
- 【思维—进制模拟映射】Hot Air Ballooning Gym - 101505B
- fzu 2250 不可能弹幕结界 分析+模拟,考察思维严谨。
- Codeforces Round #180 (Div. 2) A. Snow Footprints 【思维+模拟】
- Codeforces-868B ,C 模拟,思维。。
- CF 155C
- CF 518 E Arthur and Questions(贪心,模拟乱搞)
- HDU 5122 K.Bro Sorting (14北京 思维模拟)