zoukankan      html  css  js  c++  java
  • 牛客假日团队赛4--A-出逃

    链接:https://ac.nowcoder.com/acm/contest/5663/A
    来源:牛客网

    一大清早,Farmer John就被木材破裂的声音吵醒了。是这些奶牛们干的,她们又逃出牛棚了!

    Farmer John已经厌烦了奶牛在清晨出逃,他觉得受够了:是时候采取强硬措施了。他在牛棚的墙上钉了一个计数器,追踪从上次出逃开始经过的天数。所以如果某一天早上发生了出逃事件,这一天的计数器就为0;如果最近的出逃是3天前,计数器读数就为3。Farmer John一丝不苟地记录了每一天计数器的读数。

    年末到了,Farmer John准备做一些统计。他说,你们这些奶牛会付出代价的!然而意想不到的是,他的记录的一些条目竟然丢失了!

    Farmer John确信他是在发生出逃的某一天开始记录的。请帮助他确定,在所有与残留记录条目一致的事件序列中,基于记录的时间,最少和最多可能发生的出逃次数。

    输入的第一行包含一个整数NN(1≤N≤100),表示从Farmer John开始对奶牛出逃计数器进行计数以来已经经过的天数。

    第二行包含N个空格分隔的整数。第i个整数是−1,表示第ii天的记录丢失了,或者是一个非负整数ai(不超过100),表示在第i天计数器的数字是ai。

    样例:

    输入:

    4
    -1 -1 -1 1

    输出:

    2 3

    如果没有事件序列与Farmer John的残留记录以及他所确定的奶牛在第1天清晨出逃这一事实相一致,输出一个整数−1。否则,输出两个空格分隔的整数m和M,其中m为所有事件序列中出逃的最少次数,M为最多次数。

    首先判断存在-1的情况如下:

    1. 第一天的记录的数字>0;
    2. 第i天的记录ai>总天数;
    3. 出逃天数不符合逻辑,如首次记录ai=3,两天后记录为4,很明显这是不符合逻辑的

    解题思路:

    • 根据提供的ai给前面的-1值赋值,如-1 -1 -1 0 -1 -1 -1 2,赋值后为-1 -1 -1 0 -1 0 1 2 
    • 以此类推,最多次数为0和-1的总个数,最少次数为0的个数

    代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    int a[105];
    int main() {
        int n;
        int num;
        cin>>n;
        for(int i=1;i<=n;++i)
        {
            cin>>a[i];
        }
        if(a[1]==0||a[1]==-1)
            a[1]=0;
        else
        {
            cout<<-1;
            exit(0);
        }
        for(int i=1;i<=n;++i)
        {
          if(a[i]>0)
          {
              if(a[i]>i-1)
              {
                  cout<<-1;
                  exit(0);
              }
             num=a[i]-1;
             for(int j=i-1;j>-1&&num>-1;j--,num--)
             {
                 if(a[j]==-1||a[j]==num)
                 {
                    a[j]=num;
                 }
                else
                 {
                     cout<<-1;
                     exit(0);
                 }
             }
          }
        }
        int les=0,mos=0;
        for(int i=1;i<=n;++i)
        {
            if(a[i]==0)
            {
                les++;
                mos++;
            }
            if(a[i]==-1)
            {
                mos++;
            }
        }
        cout<<les<<' '<<mos;
        return 0;
    }
  • 相关阅读:
    用Python完成一个汇率转换器
    鸿蒙如何用JS开发智能手表App
    鸿蒙如何用JS开发智能手表App
    SAP Spartacus SplitViewComponent Migration 的一个具体例子
    SAP Spartacus B2B 页面 Popover Component 的条件显示逻辑
    SAP Spartacus 升级时关于 schematics 的更新
    SAP Spartacus B2B 页面 Disable 按钮的显示原理
    SAP Spartacus B2B 页面 Disable Confirmation 对话框的显示原理
    通过 Feature Level 动态控制 SAP Spartacus 的页面显示
    SAP Commerce Cloud Build Manifest Components
  • 原文地址:https://www.cnblogs.com/acmer-hmin/p/12869648.html
Copyright © 2011-2022 走看看