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)的更多相关文章

  1. Atcoder Beginner Contest 147C(状态压缩)

    最多15个人,用N个二进制的数字表示每个人的状态,然后检验.这串数字相当于已经把这些人的状态定了下来,如果和输入的情况不符则这串数字不正确,直接忽略,因为枚举了所有的情况,所以总有正确的,不必在错误的 ...

  2. AtCoder Beginner Contest 254(D-E)

    Tasks - AtCoder Beginner Contest 254 D - Together Square 题意: 给定一个N,找出所有不超过N的 ( i , j ),使得( i * j )是一 ...

  3. AtCoder Beginner Contest 086 (ABCD)

    A - Product 题目链接:https://abc086.contest.atcoder.jp/tasks/abc086_a Time limit : 2sec / Memory limit : ...

  4. AtCoder Beginner Contest 085(ABCD)

    A - Already 2018 题目链接:https://abc085.contest.atcoder.jp/tasks/abc085_a Time limit : 2sec / Memory li ...

  5. AtCoder Beginner Contest 084(AB)

    A - New Year 题目链接:https://abc084.contest.atcoder.jp/tasks/abc084_a Time limit : 2sec / Memory limit  ...

  6. AtCoder Beginner Contest 083 (AB)

    A - Libra 题目链接:https://abc083.contest.atcoder.jp/tasks/abc083_a Time limit : 2sec / Memory limit : 2 ...

  7. Atcoder Beginner Contest 121D(异或公式)

    #include<bits/stdc++.h>using namespace std;int main(){    long long a,b;    cin>>a>&g ...

  8. Atcoder Beginner Contest 156E(隔板法,组合数学)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ; long long fac[N] ...

  9. Atcoder Beginner Contest 155E(DP)

    #definde HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ]; int main(){ ios: ...

随机推荐

  1. 关于使用koa实现线上 https服务

    var https=require("https");//https服务var fs= require("fs");var Koa = require('koa ...

  2. Freeswitch使用originate转dialplan

    概述 Freeswitch是一款非常好用的开源VOIP软交换平台. 最近在对fs做一些功能测试,测试的过程中产生的一个需求,如何从fs发起呼叫并把后续的呼叫流程转到某一个dialplan上,这样在测试 ...

  3. 【RPA之家转载RPA创新产业峰会回看】机器人流程自动化专利态势报告

    [RPA之家转载RPA创新产业峰会回看]机器人流程自动化专利态势报告 自动化的一个专利情况的监测,就是全球监测的情况.今天我可能给大家汇报的主要是三个方面,第一个方面就是讲一下全球投资智能化的专利的一 ...

  4. 使用Karmada实现Helm应用的跨集群部署

    摘要:借助Karmada原生API的支持能力,Karmada可以借助Flux轻松实现Helm应用的跨集群部署. 本文分享自华为云社区< 使用Karmada实现Helm应用的跨集群部署[云原生开源 ...

  5. 校验日期格式为yyyy-MM-dd

    /** * 校验时间 * * @param text * @return */ public static boolean checkTime(String text) { DateFormat fo ...

  6. pytest多进程/多线程执行测试用例

    前言: 实际项目中的用例数量会非常多,几百上千:如果采用单进程串行执行的话会非常耗费时间.假设每条用例耗时2s,1000条就需要2000s $\approx$ 33min:还要加上用例加载.测试前/后 ...

  7. HTTP Status 405 - Request method 'GET' not supported?(尚硅谷Restful案例练习关于Delete方法出现的错误)

    哈罗大家好,最近在如火如荼的学习java开发----Spring系列框架,当学习到SpringMVC,动手实践RESTFUL案例时,发现了以上报错405,get请求方法没有被支持. 首先第一步,我查看 ...

  8. Cisco Packet Tracer Student(思科网络模拟器)模拟搭建VLAN网络

    一.VLAN简介 VLAN指在同一个物理网段内,通过逻辑手段,将其划分出多个虚拟的局域网,每个虚拟局域网都具备和真实局域网一样的功能.VLAN不受物理位置限制,可以灵活划分,同一个VLAN内的主机之间 ...

  9. 【docker专栏5】详解docker镜像管理命令

    一.国内Docker镜像仓库 由于大家都知道的原因,从国外的docker 仓库中pull镜像的下载速度实际上是很慢的.国内的一些一线厂商以及docker官方都在国内免费提供了一些docker镜像仓库, ...

  10. 新版recon-ng安装模块

    表现:进入后报[*] No modules enabled/installed. 1.直接在recon-ng控制台输入marketplace install all,用来下载所有插件,如果不可以,往下 ...