zoukankan      html  css  js  c++  java
  • CS Academy Round41 Cinema Seats

    题目链接https://csacademy.com/contest/archive/task/cinema-seats

    题目大意:给你一串长度为n的01字符串表示n个座位,0表示有人,1表示没人,移动一个人表示将1换到另一个为0的地方。问在只允许移动一个人或0个人情况下连续座位的最大长度。

    解题思路:考虑00100101的前缀和00111223,假设移动了第三个1,那么前缀和变为00000234,即是说我们只要找到前缀和为aaa(a+1)(a+1)(a+1)的最大长度即可。那么就可以枚举然后二分来做了。

    需要注意的是当空位的个数比找到的长度小的时候要将结果-1,实际上是这个1被移动到了找到的长度的最末尾。

    代码:

     1 const int maxn = 1e5 + 5;
     2 char str[maxn];
     3 int a[maxn];
     4 
     5 int main(){
     6     scanf("%s", str);
     7     int len = strlen(str), zeronum = 0;
     8     a[0] = (str[0] == '0'? 0: 1);
     9     zeronum += (str[0] == '0'? 1: 0);
    10     for(int i = 1; i < len; i++){
    11         a[i] = a[i - 1] + (str[i] == '0'? 0: 1);
    12         zeronum += (str[i] == '0'? 1: 0);
    13     }
    14     int maxv = 0, maxlen = 0, m = a[len - 1];
    15     
    16     for(int i = a[0]; i <= m; i++){
    17         int tmlen = lower_bound(a, a + len, i + 2) - lower_bound(a, a + len, i);
    18         if(tmlen > maxlen){
    19             maxlen = tmlen;
    20             maxv = i;
    21         }
    22     }
    23     if(maxv != 0) maxlen--;
    24     if(zeronum < maxlen) maxlen--;
    25     printf("%d
    ", maxlen); 
    26 }

    题目:

    Cinema Seats

    Time limit: 1000 ms
    Memory limit: 128 MB

     

    In a cinema there is a long row of NN seats. Some of them are occupied, some of them are free. At most one of the people who are already seated can move to another seat.

    A group of friends are going to come the cinema. What is the largest size of the group such that they can take a contiguous sequence of seats?

    Standard input

    The first line contains a binary string of length NN. The i^{th}ith​​ character is 0 is the i^{th}ith​​ seat is empty, and 1 if the seat is taken.

    Standard output

    Print the answer on the first line.

    Constraints and notes

    • 2 leq N leq 10^52N105​​ 
    • There will be at least one taken seat
    • There will be at least one free seat
    InputOutputExplanation
    10010101
    
    4
    

    You can move the person seating in the 44th seat to the 77th, obtaining the configuration 10000111. In this way, the group size will be 44, sitting from the 22nd chair up to the 55th one.

    12222111 - the group's chairs were marked with 2

    001100
    
    3
    

    One way is to move the person from the 33rd seat to the 55th one.

    This way, the cinema row becomes 000110, leaving a sequence of 33 seats for the group.

     

    01000100
    
    6
    

    Move the person from the 66th seat to the 11st one.

    This way, it's posible to sear a group of size 66

  • 相关阅读:
    使用C#替换Word文档里的文字和图片
    《程序员的思维修炼—开发认知潜能的九堂课》—从新手到专家的历程
    从已有数据库表生成Insert语句的小工具
    我的2010
    Sqlite批量插入速度慢的解决方法小计
    分享一个winForm下的Chart控件
    分享一个任务提醒小工具
    SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图
    Winform中选取指定文件夹并获取其下所有文件
    Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式
  • 原文地址:https://www.cnblogs.com/bolderic/p/7337976.html
Copyright © 2011-2022 走看看