题面:

A. Taming the Herd

Input file: standard input
Output file: standard output
Time limit: 1 second
Memory limit: 256 megabytes
Early in the morning, Farmer John woke up to the sound of splintering wood. It was the cows, and they were breaking out of the barn again!

Farmer John was sick and tired of the cows’ morning breakouts, and he decided enough was enough: it was time to get tough. He nailed to the barn wall a counter tracking the number of days since the last breakout. So if a breakout occurred in the morning, the counter would be 0 that day; if the most recent breakout was 3 days ago, the counter would read 3. Farmer John meticulously logged the counter every day.

The end of the year has come, and Farmer John is ready to do some accounting. The cows will pay, he says! But lo and behold, some entries of his log are missing!

Farmer John is confident that the he started his log on the day of a breakout. Please help him determine, out of all sequences of events consistent with the log entries that remain, the minimum and maximum number of breakouts that may have take place over the course of the logged time.
Input
The first line contains a single integer N (1 ≤ N ≤ 100), denoting the number of days since Farmer John started logging the cow breakout counter.

The second line contains N space-separated integers. The ith integer is either −1, indicating that the log entry for day i is missing, or a non-negative integer ai (at most 100), indicating that on day i the counter was at ai.

Output
If there is no sequence of events consistent with Farmer John’s partial log and his knowledge that the cows definitely broke out of the barn on the morning of day 1, output a single integer −1. Otherwise, output two space-separated integers m followed by M, where m is the minimum number of breakouts of any consistent sequence of events, and M is the maximum.
Example
Input
4
-1 -1 -1 1
Output
2 3
Note
In this example, we can deduce that a breakout had to occur on day 3. Knowing that a breakout also occurred on day 1, the only remaining bit of uncertainty is whether a breakout occurred on day 2. Hence, there were between 2 and 3 breakouts in total.

题目描述:

奶牛搞破坏,把奶牛棚弄坏了。从奶牛棚被破坏的那一天起,农夫就开始写日志,并且每一天都会写。这个日志记录的是:离上次奶牛棚被破坏的天数。如果当天奶牛棚被损坏,就记录为0;如果前3天奶牛棚被损坏,就记录为3。年末,农夫拿这个日志找奶牛“算账”的时候,发现这个日志被损坏了(有些部分被丢失了)。现在要帮助农夫判断:这个日志是否“合法”。如果“合法”,就输出最小可能和最大可能奶牛棚被破坏的天数;如果不“合法”,就输出-1。(当天日志被丢失的部分用-1表示)

题目分析:

这道题是一道水题,但是由于看错题目(英语渣的我),当场没有做出来?。这道题大概是这样的:
1.第一天要么就是0,要么就是-1(被丢失)。如果不是0和-1,直接可以判断不合法。
2.我们可以根据日志上的其他剩余信息推算出其他天的日志信息,最简单的:第一天无论是0还是-1,一定是可以推算出是0。其他:比如:
这里第6天记录了一个“2”,代表前2天奶牛棚被坏了,所以第4天一定是0,第5天一定是1:
如果第4天不是0,或者第5天不是1,那么一定不合法:
我们再想一想:第7,8,9天我们能推出来吗?根据现有条件第7,8,9天的日志内容是不一定的:假如第6天后奶牛棚没有被破坏,那么后面的所有内容就可以被推出来,否则也不一定。所以现在就先要编写一个把能推的都推出来的代码,看究竟是否合法。
在写这个代码的时候,一般我们会从1遍历倒N,可是这里反过来遍历(N-1)代码会更容易些,为什么?假设第6天记录的是3,那么第5天是不是记录的是3-1,也就是2:
然后就一直进行减1的操作,直到是0为止:
这样想的结果是不是和刚刚按从1-N的顺序想的结果一样,但是代码只需要从(N-1)遍历一次就行了。
推算完全部结果后(这时肯定是合法的,如果中间检查到不合法就直接输出-1然后结束程序),奶牛棚被破坏的天数最少的天数就是推算出来后,日志内容是0的总天数。
(注:这里最少天数为2)
最多的天数怎样计算?只要把不能推算出来的日志内容全部变为0:
然后统计0的个数(不能推算出来日志内容的天数 + 最少天数)就是最大天数的(这里最大天数为6)。
AC代码:
 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 int n, a[105];
 5
 6 int main(){
 7     cin >> n;
 8     for(int i = 1; i <= n; i++){
 9         cin >> a[i];
10     }
11
12     if(a[1] != 0 && a[1] != -1){
13         cout << -1 << endl;   //最简单的不合法情况
14         return 0;
15     }
16
17     a[1] = 0;    //这个不要漏
18     for(int i = n; i >= 1;){
19         while(a[i] == -1 && i >= 1) i--; //写这种代码时一定要记得 "i >= 1" 这样的限制条件
20         if(i == 0) break;  //遍历完
21
22         int t = a[i];
23         while(t >= 0 && i >= 1){
24             if(a[i] != t && a[i] != -1){  //推算出的不合法
25                 cout << -1 << endl;
26                 return 0;
27             }
28             a[i--] = t--;
29         }
30     }
31
32     int minn, cnt;
33     minn = cnt = 0;
34     for(int i = 1; i <= n; i++){  //简单的计数
35         if(a[i] == 0) minn++;
36         if(a[i] == -1) cnt++;
37     }
38
39     cout << minn << " " << minn+cnt << endl;
40     return 0;
41 }

转载于:https://www.cnblogs.com/happy-MEdge/p/10530860.html

2019 GDUT Rating Contest II : A. Taming the Herd相关推荐

  1. 2019 GDUT Rating Contest II : Problem G. Snow Boots

    题面: G. Snow Boots Input file: standard input Output file: standard output Time limit: 1 second Memory ...

  2. 2020 GDUT Rating Contest II (Div. 2) A. Fence Planning

    来源 codeforces 2020 GDUT Rating Contest II (Div. 2) CF链接 题目: Farmer John's N cows, conveniently numbe ...

  3. 2019 GDUT Rating Contest I : Problem H. Mixing Milk

    题面: H. Mixing Milk Input file: standard input Output file: standard output Time limit: 1 second Memory ...

  4. 2020 GDUT Rating Contest I (Div. 2) A.Cow Gymnastics

    来源 codeforces 2020 GDUT Rating Contest I (Div. 2) 题目: A. Cow Gymnastics In order to improve their ph ...

  5. 2020 GDUT Rating Contest III (Div2)

    2020 GDUT Rating Contest III (Div2) A Wormhole Sort 题意: 给出N个打乱顺序的数,和M条边(a,b,c)表示在a位置的数可以和在b位置的数交换,这条 ...

  6. 2020 GDUT Rating Contest III (Div. 2) B - Loan Repayment 题解

    原题 题目大意 给出NNN,KKK,MMM,假定已经给了GGG加仑奶,定义N−GX\frac{N-G}{X}XN−G​为YYY,YYY最小为MMM,在KKK天后至少给NNN加仑奶,求最大的XXX. 题 ...

  7. 2020 GDUT Rating Contest I A. Cow Gymnastics

    A. Cow Gymnastics 链接 题目描述 有n头牛一起参加了k次比赛,给出k次比赛的排名,问共有几组牛满足 其中一头牛每次比赛都比另一头厉害. 题目分析 由于数据量比较小(1<=k&l ...

  8. 2020 GDUT Rating Contest I (Div. 2) A - Cow Gymnastics 题解

    好吧--是时候补一下题解了 原题 题目大意 给出n只牛,k次排序,如果有一只牛一直比另外一只牛更前算作一对,输出一共有多少对. 题目分析 水题(数据规模小),一开始初始化全部都可以,然后一个个删去就行 ...

  9. 2020 GDUT Rating Contest III H. Photoshoot

    H. Photoshoot 链接 题目描述 有n头牛,他们的序号从为1-n,现在他们按一定顺序排好,给出每对相邻的两头牛的序号之和,求出牛现在的序号. 题目分析 因为确定其中一头牛的序号,就可以得出所 ...

最新文章

  1. NDK断点无法调试Unable to detect application ABI's
  2. go读取最后一行_CPU缓存体系对Go程序的影响
  3. Win64 驱动内核编程-17. MINIFILTER(文件保护)
  4. hadoop yarn 获取日志_赵丽颖固然漂亮,可这份Hadoop核心教程也不差啊!
  5. idea maven创建java项目_新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目(图文教程)...
  6. 我最喜爱的九位历史人物 - 曹操(Space搬家)
  7. 高斯克吕格投影知识总结
  8. 朋友圈加粗字体数字_字体:新游黑体(游ゴシック)重大更新,精巧的日系字体~...
  9. 2022年信息系统管理工程师考试大纲
  10. oracle pmon andsmon,SMON and PMON
  11. 【eos系列】智能合约 私链激活 基本操作
  12. 判断一个数是否为质数(素数)
  13. 5.项目上线流程管理规范
  14. mysql用拼音显示字段名_MySQL汉字字段按拼音排序显示
  15. 基于银河麒麟 V10 系统安装和卸载 DM8 数据库
  16. 卡卡卡的wordpress
  17. 路由器和计算机的功能有何不同,网关和路由器的区别是什么 两者又有什么不同...
  18. linux提取最新修改文件下载,linux 解压修改jar包内容并重新打包jar
  19. 计算机图形学三(补充):重心坐标(barycentric coordinates)详解及其作用
  20. 不用找,你想要的概念车壁纸素材都在这里

热门文章

  1. Xcode9学习笔记67 - 打印查看程序沙箱结构中常用的几个目录
  2. ring0 ring3 kernel driver
  3. Lazy延迟实例对象
  4. error和exception
  5. loadrunner利用虚拟IP测试
  6. 你真的了解Ioc与AOP 吗?(2)
  7. vue --- 2.0数据的响应式的一种实现
  8. css --- 选择器
  9. 开源数据库中间件-MyCa初探与分片实践
  10. C++编程经验总结1