zoukankan      html  css  js  c++  java
  • Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins

    http://codeforces.com/contest/876/problem/D

    题意:

    最开始有一串全部由“O”组成的字符串,现在给出n个数字,指的是每次把位置n上的“O”变为“X”,之后会进行扫描。

    扫描的规则是如果遇到一个字符为“X”并且这个字符后面的字符为“O”,那么就交换。

    如果哪一次扫描没有发生交换,那么扫描就停止。

    现在给出的n个数字,问第一次需要扫描多少次,第二次需要扫描多少次。。。。第n+1次需要扫描多少次(第一次指的是全部都是“O”,还没有替换为“X”)。

    思路:

    每一次,只需要统计下标最大的“O”之前有多少个“X”即可,用了一种十分巧妙的方式:

    一开始最大下标位置在n,之后每一次替换就把这个位置占领了,之后判断最大下标的位置是否被占领,如果被占领就一直把最大位置下标递减,同时减去已经有的“X”的数量(后面的“X”没有移动,所以要减去)。

    之后输出还有的“X”的数量加1即可(加一是最后还要扫一遍)。

    代码:

     1 #include <stdio.h>
     2 
     3 bool a[300005];
     4 
     5 int main()
     6 {
     7     int n;
     8 
     9     scanf("%d",&n);
    10 
    11     printf("1 ");
    12 
    13     int cnt = 0;
    14 
    15     int k = n;
    16 
    17     for (int i = 1;i <= n;i++)
    18     {
    19         int t;
    20 
    21         scanf("%d",&t);
    22 
    23         a[t] = 1;
    24 
    25         cnt++;
    26 
    27         while(a[k])
    28         {
    29             k--;
    30             cnt--;
    31         }
    32 
    33         if (i != n) printf("%d ",cnt + 1);
    34         else printf("%d",cnt+1);
    35     }
    36 
    37     printf("
    ");
    38 
    39     return 0;
    40 }
  • 相关阅读:
    企业级云数据库最佳实践
    NLP带来的“科幻感”超乎你的想象
    大咖来了:共话人工智能技术新生态
    2020年以后...软件开发人员趋势为何?
    云计算从入门到入行-专业培训认证课程限时0元领取
    linux 安装java jdk
    hadoop 配置信息记录
    hadoop 部署在centos 7 上
    centos 7 安装jdk
    Hadoop 集群ssh免密登录设置
  • 原文地址:https://www.cnblogs.com/kickit/p/7680720.html
Copyright © 2011-2022 走看看