【暴力】排队的奶牛
排隊的奶牛
題目大意:
有一個序列,要你刪去序列中的一類相同的數,然后求最長的相同數字段的長度
原題:
題目描述
農夫約翰的N只奶牛排成了一條直線,每只奶牛都有一個特定的標識序號,從左到右第i只奶牛的編號是Bi。
約翰認為他的奶牛隊列中存在某段連續區間都是相同序號的,那他的隊列就非常的美觀。為了創造這樣的一個連續區間,約翰決定將某個特定的序號的奶牛全部剔除隊列。
問題描述:
請幫助約翰計算出通過選擇除去某個特定序號的全部奶牛后,所剩下的隊列中連續的有相同序號的奶牛的最大區間。
輸入
第一行一個正整數N,表示奶牛的數量。
第2行到第N+1行,每行一個非負整數,表示從左到右每只奶牛的序號。
輸出
只有一行一個整數,表示連續的有相同序號的奶牛的最大區間中奶牛的數量。
輸入樣例
9
2
7
3
7
7
3
7
5
7
輸出樣例
4
說明
數據范圍:1<=N<=1000,奶牛序號的范圍是0到1000000。
說明:通過除去所有序號為3的奶牛,我們就得到了2777757這樣一個序列,那么最長的連續的有相同序號的區間長度就是4。
解題思路:
把出現的數字記錄下來,然后for循環一遍,然后再求最長的相同數字段的長度就行了
代碼:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,w,sum,ans,last,a[1005],b[1005],p[1000005]; int main() {scanf("%d",&n);for (int i=1;i<=n;++i){scanf("%d",&a[i]);if (!p[a[i]]){p[a[i]]=1;b[++w]=a[i];//記錄}}ans=1;for (int i=1;i<=w;++i)//枚舉去掉的數字{last=0;//清零sum=0;for (int j=1;j<=n;++j)if (a[j]==b[i]) continue;//已經去掉了else a[j]==last?(ans=max(ans,++sum)):(last=a[j],sum=1);//求最長數字段}printf("%d",ans); }總結
- 上一篇: 离弦之箭的意思是什么 离弦之箭读音及解释
- 下一篇: 【DP】景观美化