8.9 排队的奶牛 2494
来源:互联网 发布:js new date 初始化 编辑:程序博客网 时间:2024/06/04 01:00
- 题目
- 题解
- 代码
题目
农夫约翰的N只奶牛排成了一条直线,每只奶牛都有一个特定的标识序号,从左到右第i只奶牛的编号是Bi。
约翰认为他的奶牛队列中存在某段连续区间都是相同序号的,那他的队列就非常的美观。为了创造这样的一个连续区间,约翰决定将某个特定的序号的奶牛全部剔除队列。
问题描述:
请帮助约翰计算出通过选择除去某个特定序号的全部奶牛后,所剩下的队列中连续的有相同序号的奶牛的最大区间。
数据范围:1<=N<=1000,奶牛序号的范围是0到1000000
题解
暴力枚举去掉每一种序号的情况,因为n只有1000
还有一种O(n)的做法。
记录a[i]和b[i]是从第一只奶牛到第i只奶牛中离第i只奶牛最近的两种序号,同时记录a[i]和b[i]两种奶牛的数量。比如序列733773777,那么当我们从左到右扫描到第7只奶牛的时候:a=3,b=7,a的数量是1,b的数量是2,当我们扫描第5只奶牛的时候,a=7,b=3,a的数量是1,b的数量是2。这样我们从左到右扫描就可以得到答案了。
代码
var i,j,k,t,max,n,ans:longint; a,b,c:array[0..1000000]of longint;begin assign(input,'cowrow.in'); assign(output,'cowrow.out'); reset(input);rewrite(output); readln(n); t:=1;a[0]:=-1; for j:=1 to n do begin readln(k); if a[t-1]<>k then begin a[t]:=k; c[k]:=1; inc(b[t]); inc(t); end else inc(b[t-1]); end; for i:=1 to t-1 do if c[a[i]]=1 then begin for j:=1 to t-1 do if (a[j]<>a[i]) then begin k:=j; max:=b[k]; while (a[k+1]=a[i])and(a[k+2]=a[k]) do begin max:=max+b[k+2]; k:=k+2; end; if max>ans then ans:=max; end; end; writeln(ans); close(input);close(output);end.
阅读全文
2 0
- 8.9 排队的奶牛 2494
- 排队的奶牛
- 奶牛排队
- 排队的奶牛(Cows in a Row)
- [cogs 1117]奶牛排队
- 奶牛排队 (Standard IO)
- 奶牛排队 (Standard IO)
- COGS1212. 奶牛排队
- [NOIP2010冲刺十二] 奶牛排队
- 【USACO 2013 January Gold】奶牛排队
- vijos1548:奶牛排队——题解
- poj 3169 差分约束(奶牛排队)
- 110_奶牛排队问题 layout (poj 3169)
- 奶牛排队_纪中1746_模拟
- July 16th 模拟赛C T4 奶牛排队 Solution
- 线段树 1212. [NOIP2010冲刺十二] 奶牛排队
- wikioi 1242 布局(奶牛排队) 差分约束
- 买头能下崽的奶牛
- 每日一题——atoi,itoa函数的实现
- concat层 --caffe
- 理解RESTful架构
- Java_7 流程控制
- HDU-6093 Rikka with Number(计数/数位dp)
- 8.9 排队的奶牛 2494
- pytorch: 常见bug与debug
- 杭电ACM1587 买花,,气人
- DML DDL
- git提交时候报错
- 网易笔试:Fibonacci数列
- ERROR 1366 (HY000): Incorrect string value-解决方案
- Android 消息机制(Handler、Looper和MessageQueue)
- LeetCode 90 SubsetsII (Python详解及实现)