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. JS数组at函数(获取最后一个元素的方法)介绍

    本文介绍js中数组的at函数,属于比较简单的知识普及性文章,难度不大. 0x00 首先,我们可以思考如下一个问题,如果要获取一个数组的最后一个元素(这是很常用的操作),我们应该怎么做? 相信大部分人能 ...

  2. sqlserver用windows方式验证登录踩过的坑

    坑位一: 之前没用过windows验证方式登录sqlserver,连接串怎么写 坑位二: 链接上了,但是启动报错 八月 19, 2020 9:33:43 上午 com.microsoft.sqlser ...

  3. Redis 切片集群的数据倾斜分析

    Redis 中如何应对数据倾斜 什么是数据倾斜 数据量倾斜 bigkey导致倾斜 Slot分配不均衡导致倾斜 Hash Tag导致倾斜 数据访问倾斜 如何发现 Hot Key Hot Key 如何解决 ...

  4. Javaweb-在idea中配置Tomcat

    解决警告问题 为什么会有这个问题:我们访问一个网站,需要制定一个文件夹名字 最后点OK,Tomcat就亮起来了 运行成功弹出界面:

  5. 关于个人项目(臻美MV【仿抖音App】)滑动切换视频的分析(前端角度)

    我们知道你天天刷抖音的时候可以上滑切换视频,互不影响.那么我们站在前端的角度能否可以实现这种效果呢?这是我的个人项目:臻美MV 下面我是用Vue写的,现在我把它开源. Vue: 初始界面 <te ...

  6. Leetcode----<Re-Space LCCI>

    题解如下: /** * 动态规划解法: * dp[i] 表示 0-i的最小不能被识别的字母个数 * 求 dp[k] 如果第K个字母 不能和前面的字母[0-{k-1}]合在一起被识别 那么dp[k] = ...

  7. linux目录结构及定时任务

    1. Linux的根目录(最顶层的目录) windows系统有根目录:c盘的根目录就是c:\ d盘的根目录就是d:\ 每个盘(分区)都有自己的根目录 Linux系统, 也支持多个分区 Linux的分区 ...

  8. Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)

    上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...

  9. Python列表解析式的正确使用方式(一)

    先来逼逼两句: Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法.在本文中,将会展示列表解析式 (List Comprehension).我们将讨论如何使用它?什 ...

  10. BufferedImage类

    BufferedImage类(BufferedImage,是一个带缓冲区图像类,主要作用是将一副图片加载到内存中) BufferedImage类 是lmage的一个子类,BufferedImage 生 ...