问题 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;
}