問題 J: 【雜湊和雜湊表】收集雪花--map疑惑
阿新 • • 發佈:2018-11-12
問題 J: 【雜湊和雜湊表】收集雪花
時間限制: 1 Sec 記憶體限制: 128 MB
提交: 8 解決: 6
[提交] [狀態] [討論版] [命題人:admin]
題目描述
不同的雪花往往有不同的形狀。在北方的同學想將雪花收集起來,作為禮物送給在南方的同學們。一共有n個時刻,給出每個時刻下落雪花的形狀,用不同的整數表示不同的形狀。在收集的過程中,同學們不希望有重複的雪花。你可以從任意a時刻開始,在b時刻停止。a到b時刻中間的雪花也都將被收集。他們希望收集的雪花最多。
輸入
第一行一個正整數n;第2行到第n+1行表示n個時刻雪花的形狀。
輸出
最多能收集雪花的數量。
樣例輸入
5 1 2 3 2 1
樣例輸出
3
提示
n≤106,xi≤109
一看資料,1e6,1e9,用什麼hash啊,map不好嗎,(雖然map也算hash的一種)
然而寫出程式一除錯,誒,怎麼不對,????
奇怪的是想輸出下map裡存的值,輸出之後全是0,然後結果也不對了。。。
調瞎。。。發現map裡的.count()有問題。。不用之後就好了= 。=|||
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e6+7; map<int,bool> M; int a[maxn]; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); int l,r,ans = 0; l = 0,r = 0; while(r<n){ if(!M[a[r]])///!M.count(a[r]),有問題 M[a[r]] = 1; else{ while(a[l] != a[r]) M[a[l++]] = 0; l++; } //printf("%d-->%d\n",l,r); //printf("----%d-%d-%d\n",M[1],M[2],M[3]); ans = max(ans,r-l+1); r++; } printf("%d\n",ans); return 0; }