CF 875B Sorting the Coins

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF 875B Sorting the Coins相关的知识,希望对你有一定的参考价值。

题目链接:http://codeforces.com/problemset/problem/875/B

题意:一开始给定n个不流通的硬币,每次增加让其中一个硬币流通,流通的硬币的下一个如果不流通,那么就交换两个硬币。

直到两个流通的硬币在一起,或者两个不流通的硬币在一起,那就不用交换了。初始观察次数为1,操作完再继续观察,不符合继续操作(交换)。

求最后的观察次数。

题解:每次把流通的硬币都拿来往后推,看的次数可以看成当前每个硬币推到后面一堆的时候需要的次数。

已经在后面一堆的硬币当然不用推啦。

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 const int N=300000+10;
 6 int num[N],vis[N];
 7 
 8 int main(){
 9     int n,ans=1;
10     cin>>n;
11     for(int i=1;i<=n;i++) cin>>num[i];
12     cout<<1;
13     int pos=n;
14     for(int i=1;i<=n;i++){
15         vis[num[i]]=1;
16         ans++;
17         while(vis[pos]) pos--,ans--;
18         cout<<" "<<ans;
19     }
20     return 0;
21 }

 

以上是关于CF 875B Sorting the Coins的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 876 D. Sorting the Coins

[CF930E]/[CF944G]Coins Exhibition

CF1003D Coins and Queries 贪心

CF930E Coins Exhibition

CF 843 A. Sorting by Subsequences

题解 CF58B Coins