[ 题解 ] [ 逆推 ] A. Taming the Herd

Posted kaidora

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ 题解 ] [ 逆推 ] A. Taming the Herd相关的知识,希望对你有一定的参考价值。

http://codeforces.com/group/NVaJtLaLjS/contest/238204/problem/A


题意:

农夫的牛冲破了牛棚,当天农夫在牛棚弄了个计数器,这个计数器记录了牛棚最后一次被撞是几天前。

如果某天牛冲破了牛棚,那么当天计数器为0,第二天为1

可是农夫发现他的数据损坏了,丢失的数据以-1表示。农夫确信计数器第一天是0

现在问:按照这些数据,牛最少冲撞牛棚几次?最多几次?

如果发现数据错误(比如32)输出-1


示例:

Input

4
-1 -1 -1 1

Output

2 3

 

如果我们知道某天的数据是5,那么可以肯定推出昨日的数据是4

如果昨日的数据是-1,覆盖;如果不是4,那么可以输出-1结束了。

4的话,继续往前推,一直到0为止。这样可以刷出全部已知数据。


其中,第一天必定是0,这个是要稍微照顾下的。


刷完可能还有未知数据-1。假设牛在这些天都没有冲撞牛棚,那么0的数量就是最小答案;

假如牛天天冲撞牛棚,那么加上-1的数量就是最大答案了。

 1 #include <stdio.h>
 2 
 3 int Log[102]={0};
 4 
 5 int main()
 6 {
 7     int N;
 8     short fail=0;
 9     scanf("%d",&N);
10     for(int n=1;n<=N;n++)
11     {
12         scanf("%d",&Log[n]);
13         if(n==1)
14         {
15             if(Log[1]==0)continue;
16             if(Log[1]==-1)Log[1]=0;continue;
17             
18             fail=1;
19         }
20         if(Log[n]>0)
21             for(int i=n-1;i>0;i--)
22             {
23                 if(Log[i]==-1)
24                     Log[i]=Log[i+1]-1;
25                 
26                 if(Log[i]!=Log[i+1]-1)fail=1;
27                 if(Log[i]==0)break;
28             }
29     }
30     if(fail){    puts("-1");    return 0;}
31     
32     int Zero=0,Nega=0;
33     for(int n=1;n<=N;n++)
34     {
35         if(Log[n]==0)Zero++;
36         if(Log[n]==-1)Nega++;
37     }
38     printf("%d %d
",Zero,Zero+Nega);
39     return 0;
40 }

 

以上是关于[ 题解 ] [ 逆推 ] A. Taming the Herd的主要内容,如果未能解决你的问题,请参考以下文章

[题解]Mail.Ru Cup 2018 Round 1 - A. Elevator or Stairs?

Luogu1280 尼克的任务

Codeforces Round #650 (Div. 3) A. Short Substrings

ImportError: cannot import name ‘VectorQuantizer2‘ from ‘taming.modules.vqvae.quantize‘

ImportError: cannot import name ‘VectorQuantizer2‘ from ‘taming.modules.vqvae.quantize‘

CCF 工资计算