AtCoder Beginner Contest 264(D-E)
D - "redocta".swap(i,i+1)
题意: 给一个字符串,每次交换相邻两个字符,问最少多少次变成"atcoder"
题解: 从左到右依次模拟
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=2e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll a[N];
ll minn[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
string s;cin>>s;
string p="atcoder";
ll ans=0;
for(ll i=0;i<=6;i++){
if(s[i]==p[i]) continue;
ll j=i;
while(s[j]!=p[i]){
j++;
}
ans+=j-i;
for(ll z=j;z>=i;z--) s[z]=s[z-1];
s[i]=p[i];
}
cout<<ans;
}
E - Blackout 2
题意: 给出N个城市,M个发电厂,K个电线,然后Q次操作 ,每次剪断一根电线,问每次操作之后,有几个城市是有点的,只有到一个城市与发电厂是连通的,才是有电的。
题解: 我们可以把这个问题换位思考。
- 开始有K根电线,然后每次剪断一根,问剪断之后有多少城市有电
- 开始有K-Q根电线,每次加上一根,问加上之后有多少城市有电
我们可以发现,上面这两个问题他们最后得出的答案刚好是相反的,所以,我们可以通过第二种方法求出答案然后逆序输出,明显第二种方法简单。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=5e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll pre[N];
pll q[N];
ll sum[N],flag[N];
ll p[N],vis[N],vp[N];
ll find(ll x){
if(pre[x]==x) return x;
return pre[x]=find(pre[x]);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll n,m,k;cin>>n>>m>>k;
for(ll i=1;i<=k;i++){
cin>>q[i].first>>q[i].second;
}
ll t;cin>>t;
for(ll i=1;i<=t;i++){ cin>>p[i];vis[p[i]]=1;}//记录那些电线是剪断的
for(ll i=1;i<=n+m;i++) pre[i]=i;
for(ll i=1;i<=k;i++){
if(vis[i]) continue;//遍历开始没有剪断的电线
ll fx=find(q[i].first);
ll fy=find(q[i].second);
pre[fx]=fy;
}
for(ll i=1;i<=n;i++){
ll fx=find(i);
sum[fx]++;
}
ll ans=0;
for(ll i=n+1;i<=m+n;i++){//求出开始的时候有多少城市有电
ll fx=find(i);
ans+=(flag[fx]==0?sum[fx]:0);
flag[fx]=1;
}
stack<ll> lm;
for(ll i=t;i>=1;i--){
lm.push(ans);
ll fx=find(q[p[i]].first);
ll fy=find(q[p[i]].second);
if(fx==fy) continue;//如果是连通的,就没必要处理
if(!flag[fx]&&flag[fy]){//如果第一个是没电,第二个有电,就答案加上没电的
flag[fx]=1;ans+=sum[fx];
}
else if(flag[fx]&&!flag[fy]){//同理
flag[fy]=1;ans+=sum[fy];
}
else if(!flag[fx]&&!flag[fy]){//如果都没电,就让他们合并
sum[fy]+=sum[fx];
}
pre[fx]=fy;
}
while(lm.size()){
cout<<lm.top()<<endl;//逆序输出
lm.pop();
}
}
AtCoder Beginner Contest 264(D-E)的更多相关文章
- Atcoder Beginner Contest 147C(状态压缩)
最多15个人,用N个二进制的数字表示每个人的状态,然后检验.这串数字相当于已经把这些人的状态定了下来,如果和输入的情况不符则这串数字不正确,直接忽略,因为枚举了所有的情况,所以总有正确的,不必在错误的 ...
- AtCoder Beginner Contest 254(D-E)
Tasks - AtCoder Beginner Contest 254 D - Together Square 题意: 给定一个N,找出所有不超过N的 ( i , j ),使得( i * j )是一 ...
- AtCoder Beginner Contest 086 (ABCD)
A - Product 题目链接:https://abc086.contest.atcoder.jp/tasks/abc086_a Time limit : 2sec / Memory limit : ...
- AtCoder Beginner Contest 085(ABCD)
A - Already 2018 题目链接:https://abc085.contest.atcoder.jp/tasks/abc085_a Time limit : 2sec / Memory li ...
- AtCoder Beginner Contest 084(AB)
A - New Year 题目链接:https://abc084.contest.atcoder.jp/tasks/abc084_a Time limit : 2sec / Memory limit ...
- AtCoder Beginner Contest 083 (AB)
A - Libra 题目链接:https://abc083.contest.atcoder.jp/tasks/abc083_a Time limit : 2sec / Memory limit : 2 ...
- Atcoder Beginner Contest 121D(异或公式)
#include<bits/stdc++.h>using namespace std;int main(){ long long a,b; cin>>a>&g ...
- Atcoder Beginner Contest 156E(隔板法,组合数学)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ; long long fac[N] ...
- Atcoder Beginner Contest 155E(DP)
#definde HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ]; int main(){ ios: ...
随机推荐
- Node.js精进(3)——流
在 JavaScript 中,一般只处理字符串层面的数据,但是在 Node.js 中,需要处理网络.文件等二进制数据. 由此,引入了Buffer和Stream的概念,两者都是字节层面的操作. Buff ...
- BUUCTF-小明的保险箱
小明的保险箱 16进制打开可以发现存在一个RAR压缩包,压缩包里面应该就是flag文本 使用ARCHPR破解即可
- 《阿里云天池大赛赛题解析》——O2O优惠卷预测
赛事链接:https://tianchi.aliyun.com/competition/entrance/231593/introduction?spm=5176.12281925.0.0.7e157 ...
- WPF开发随笔收录-带递增递减按钮TextBox
一.前言 今天分享一下如何实现带递增递减按钮的TextBox控件 二.正文 1.之前的博客分享了一篇自定义XamlIcon控件的文章,这次就直接在那个项目的基础上实现今天这个自定义控件 2.首先添加两 ...
- expect自动应答
expect脚本 1. expect简介 expect是一个用来处理交互的命令.借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成. expect(自动应答) 基于TCL(Tool C ...
- NC24622 Brownie Slicing
NC24622 Brownie Slicing 题目 题目描述 Bessie has baked a rectangular brownie that can be thought of as an ...
- .NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)
一.引言 上一篇.NET ORM框架HiSql实战-第一章-集成HiSql 已经完成了Hisql的引入,本节就把 项目中的菜单管理改成hisql的方式实现. 菜单管理界面如图: 二.修改增删改查相关代 ...
- 002面试题_Switch...case的数据
1.byte 2.short 3.int 4.char 5.String 6.枚举
- 1_day01_操作系统安装
操作系统安装 内容介绍 1.制作U盘启动器 2.备份驱动 3.安装操作系统 4.驱动更新 5.依赖库检测 6.系统漏洞修复 7.系统布局优化 一.制作U盘启动器 1.1 下载老毛桃 下载老毛桃pe工具 ...
- JavaScript数组方法总结及手写
目录 手写数组衍生方法 1.检测是否为数组 2.类数组转化为数组 3.数组扁平化 4.数组去重 5.数组使用Math.max 手写数组内置方法 1. Array.prototype.filter 2. ...