2019 GDUT Rating Contest II : A. Taming the Herd

题面:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仅对此用户禁用 java_Spring Security实现禁止用户重复登陆的配置原理

这篇文章主要介绍了Spring Security实现禁止用户重复登陆的配置原理,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下系统使用了Spring Security做权限管理&#xff0c;现在对于系统的用户&#xff0c;需要改动配…

SQL server 系统优化--通过执行计划优化索引(1) (转)

SQL server 系统优化--通过执行计划优化索引&#xff08;1&#xff09; 前几天,远离上海&#xff0c;到了温州&#xff0c;在客户的这边处理系统慢&#xff0c;该系统每天正常down机7次左右&#xff0c;在线人员一多&#xff0c;系统运行缓慢&#xff0c;严重影响业务操作,到了…

Linux运维系统工程师系列---13

定制安装定制安装&#xff0c;也叫源码安装&#xff0c;需要自己编译源代码的安装方式步骤&#xff1a;1、解压源代码包2、配置 configure3、编译 make4、安装 make install接下来开始做实验&#xff0c;希望朋友们自己动手实践&#xff0c;有啥不清楚的可以直接提问我&#xf…

java system.setproperties_在JAVA中 System.getProperty 和 System.setProperty 方法.

今天着手研究TOMCAT源码.在刚開始的时候Startup类中init方法中调用非常多次System.getProperty和System.setProperty的方法.后来经过网上搜索才得知,这是对操作系统变量操作的方法.System还提供一个静态方法 System.getProperties(). 这种方法能够罗列出你系统的所有变量.调用S…

雷林鹏分享:XML 编码

XML 编码 XML 文档可以包含非 ASCII 字符&#xff0c;比如挪威语 &#xff0c;或者法语 。 为了避免错误&#xff0c;需要规定 XML 编码&#xff0c;或者将 XML 文件存为 Unicode。 XML 编码错误 如果您载入一个 XML 文档&#xff0c;您可以得到两个不同的错误&#xff0c;…

C#中理解接口以及接口的作用

在C#的开发中&#xff0c;接口是非常重要也非常好用的。可是很多时候很多人都不是很了解接口的做用&#xff0c;以及该如何使用。下面我们就来理解接口的作用&#xff0c;并看看如何使用吧。假设我们公司有两种程序员&#xff1a;VB程序员&#xff0c;指的是用VB写程序的程序员…

java开发中遇到的问题及解决方法(持续更新)

工作中&#xff0c;以C/C开发为主&#xff0c;难免与其他服务和Web进行交换&#xff0c;Java开发必不可少&#xff0c;又不想动用Eclipse大家伙&#xff0c;只能自己动手编写脚本进行Java代码的编译和运行&#xff0c;期间遇到的一些问题&#xff0c;记录下来供自己和大家参考。…

c语言转化java工具_详解C语言常用的一些转换工具函数

1、字符串转十六进制代码实现&#xff1a;void StrToHex(char *pbDest, char *pbSrc, int nLen){char h1,h2;char s1,s2;int i;for (i0; i{h1 pbSrc[2*i];h2 pbSrc[2*i1];s1 toupper(h1) - 0x30; //toupper 转换为大写字母if (s1 > 9)s1 - 7;s2 toupper(h2) - 0x30;if (…

vue项目使用eslint

转载自 https://www.cnblogs.com/hahazexia/p/6393212.html eslint配置方式有两种&#xff1a; 注释配置&#xff1a;使用js注释来直接嵌入ESLint配置信息到一个文件里配置文件&#xff1a;使用一个js&#xff0c;JSON或者YAML文件来给整个目录和它的子目录指定配置信息。这些配…

提里奥·弗丁(魔兽世界里的NPC)

弗丁的名字大家也许并不熟悉&#xff1b;但白银之手骑士团的大名&#xff0c;恐怕天下无人不识。作为白银之手骑士团创始人光明使者乌瑟尔的亲密友人&#xff0c;当年的弗丁是骑士团中地位最为崇高的圣骑士之一。在第二次战争中身先士卒的表现无愧白银之手的神圣之名。荣归故里…

java http请求插件_java http请求工具整理

处理了http 的get和post的请求&#xff0c;分别支持同步处理&#xff0c;异步处理两种方式下见代码。Slf4jpublic class HttpUtils { /** * 同步请求http请求 不推荐 * * param url * return */ public static byte[] httpGetSync(String url) { HttpGet httpGet new HttpGet(…

mysql存储过程语法及实例

2019独角兽企业重金招聘Python工程师标准>>> 存储过程如同一门程序设计语言&#xff0c;同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 --------------------基本语法-------------------- 一.创建存储过程 create procedure sp_name() begin ......…

JAVA 重写重载/多态/抽象类/封装/接口/包

重写&重载 重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变&#xff0c;核心重写&#xff01; 重载(overloading) 是在一个类里面&#xff0c;方法名字相同&#xff0c;而参数不同。返回类型可以相同也可以不同。 …

手写一个简单的WinForm程序(2)

经过高人指教之后的代码&#xff1a; using System; using System.Windows.Forms; using System.Drawing; namespace MyApplication { public partial class Form1 : Form { private delegate void ShowText(); TextBox textBox1 new TextBox(); …

mysql部署jar_mysql+jar踩坑记录

一、关于mysqlmysql 5用的驱动是com.mysql.jdbc.Drivermysql 6用的驱动是com.mysql.cj.jdbc.Drivermysql连接url中useUnicodetrue&characterEncodingutf8&serverTimezoneAsia/Shanghai作用useUnicodetrue&characterEncodingutf8—用来指定编码格式为utf8serverTime…

ajax和Java session监听

Session监听嘛&#xff0c;没什么好解释的&#xff0c;java提供了很灵活的事件机制来监听session&#xff0c;可以监听session的创建和销毁&#xff0c;监控session 所携带数据的创建、变化和销毁&#xff0c;可以监听session的锐化和钝化&#xff08;了解对象序列化的兄弟应该…

计算机历年考研复试上机基础题(一)

abc 题目描述 设a、b、c均是0到9之间的数字&#xff0c;abc、bcc是两个三位数&#xff0c;且有&#xff1a;abcbcc532。求满足条件的所有a、b、c的值。输入描述: 题目没有任何输入。 输出描述: 请输出所有满足题目条件的a、b、c的值。 a、b、c之间用空格隔开。 每个输出占一行。…

CSS选择器的权重与优先规则

2019独角兽企业重金招聘Python工程师标准>>> 我们在使用CSS对网页元素定义样式时经常会遇到这种情况&#xff1a;要对一般元素应用一般样式&#xff0c;然后在更特殊的元素上覆盖它们。那么我们怎么样来保证我们所新定义的元素样式能覆盖目标元素上原有的样式呢&…

《代码之美》第六章:菜鸟的自圆其说

Micheal Feather是我早就攻击过的专家级菜鸟&#xff0c;看过这一章&#xff0c;他在我心目中的高级初学者的形象&#xff0c;已经板上钉钉了。前两天看一本书&#xff0c;讲到调研表明&#xff0c;很多人在自己的领域干了20年&#xff0c;过了前五年&#xff0c;基本就不会再获…

java返回两个string_java – 为什么String.intern()方法返回两个不同的结果?

我有这样的代码&#xff1a;public static void main(String[] args) {String str1 new StringBuilder("计算机").append("软件").toString();System.out.println(str1.intern()str1);String str2 new StringBuilder("ja").append("va&qu…