码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-03-15 09:21:03      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:line   bsp   最小   计数   short   天都   link   lin   tput   

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\n",Zero,Zero+Nega);
39     return 0;
40 }

 

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

标签:line   bsp   最小   计数   short   天都   link   lin   tput   

原文地址:https://www.cnblogs.com/Kaidora/p/10534686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!