8.9 排队的奶牛 2494
2017-08-09 19:33
218 查看
题目
题解
代码
约翰认为他的奶牛队列中存在某段连续区间都是相同序号的,那他的队列就非常的美观。为了创造这样的一个连续区间,约翰决定将某个特定的序号的奶牛全部剔除队列。
问题描述:
请帮助约翰计算出通过选择除去某个特定序号的全部奶牛后,所剩下的队列中连续的有相同序号的奶牛的最大区间。
数据范围:1<=N<=1000,奶牛序号的范围是0到1000000
时间复杂度O(n2)
还有一种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。这样我们从左到右扫描就可以得到答案了。
题解
代码
题目
农夫约翰的N只奶牛排成了一条直线,每只奶牛都有一个特定的标识序号,从左到右第i只奶牛的编号是Bi。约翰认为他的奶牛队列中存在某段连续区间都是相同序号的,那他的队列就非常的美观。为了创造这样的一个连续区间,约翰决定将某个特定的序号的奶牛全部剔除队列。
问题描述:
请帮助约翰计算出通过选择除去某个特定序号的全部奶牛后,所剩下的队列中连续的有相同序号的奶牛的最大区间。
数据范围:1<=N<=1000,奶牛序号的范围是0到1000000
题解
暴力枚举去掉每一种序号的情况,因为n只有1000时间复杂度O(n2)
还有一种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]:= d0b8 -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.
相关文章推荐
- 线段树 1212. [NOIP2010冲刺十二] 奶牛排队
- 110_奶牛排队问题 layout (poj 3169)
- wikioi 1242 布局(奶牛排队) 差分约束
- 奶牛排队
- poj 3169 差分约束(奶牛排队)
- 排队的奶牛(Cows in a Row)
- 【USACO 2013 January Gold】奶牛排队
- 奶牛排队 (Standard IO)
- [NOIP2010冲刺十二] 奶牛排队
- 奶牛排队_纪中1746_模拟
- 排队的奶牛
- vijos1548:奶牛排队——题解
- July 16th 模拟赛C T4 奶牛排队 Solution
- COGS1212. 奶牛排队
- 奶牛排队 (Standard IO)
- [cogs 1117]奶牛排队
- 奶牛排队(USACO)( JSOI夏令营2017 day1 T2 ) * * *【O(nlogn)最长上升子序列】
- USACO 奶牛排队
- 蓝桥杯--ALGO-6 安慰奶牛
- 小朋友排队