C语言,用的是双指针,为啥过不了

UVA11572 Unique Snowflakes

@[ZOECCCCCCCC](/user/1121807) 请初始化 `max=0;` 另外 `int k[100005] = {0};` 不是一种非常靠谱的赋初值方式,建议采用 `int k[100005];memset(k,0,sizeof(k));`。
by Terrible @ 2023-12-07 19:36:56


@[Terrible](/user/195942) 谢谢,刚刚发现了,输入第二组数据的时候 max值没变 我不是很懂洛谷的规矩,问题解决后是不是要把帖子删掉?
by ZOECCCCCCCC @ 2023-12-07 19:42:32


@[ZOECCCCCCCC](/user/1121807) 如果你认为帖子没有很大参考价值的话可以删掉,并没有说解决后必须删帖的说法。
by Terrible @ 2023-12-07 19:46:40


@[Terrible](/user/195942) OK,谢谢
by ZOECCCCCCCC @ 2023-12-07 19:47:49


@[Terrible](/user/195942) 大佬看了你的回复我受益匪浅,但是我对于这个双指针过不去也很头疼 ```cpp // Problem: // 唯一的雪花 Unique Snowflakes // // Contest: Luogu // URL: https://www.luogu.com.cn/problem/UVA11572 // Memory Limit: 0 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org) #include<iostream> #include<algorithm> //#include<cstdio> #include<map> #define ll long long #define endl '\n' #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>(b);i--) #define N 1000100 //1e6+100 using namespace std; int a[N]; map<int,int>m; void solve(){ int n; cin>>n; rep(i,1,n) cin>>a[i]; m.clear(); int l=1,r=1; m[a[l]]=1; int res=1; while(r<n){ if(m[a[r+1]]==0)m[a[++r]]++; else { while(m[a[r+1]]!=0&&l<=r) m[a[l++]]--; r++; } res=max(res,r-l+1); } cout<<res<<endl; } int main(){ int _; cin>>_; while(_--){ solve(); } return 0; } ```
by lightme @ 2024-01-29 11:49:33


现在发现栈区内给数组用花括号`{}`赋值,GCC 编译出来,似乎会用 memset 给没有注明具体值的内存赋值,所以应该没有太大的问题,之前说的结论可以不理会了。
by Terrible @ 2024-01-29 12:11:00


@[lightme](/user/940317) ```cpp while(r<n){ while(m[a[r+1]]!=0&&l<=r) m[a[l++]]--; m[a[++r]]++; res=max(res,r-l+1); } ```
by Terrible @ 2024-01-29 12:18:05


@[Terrible](/user/195942) 可以给我讲述一下我的源码哪有问题吗
by lightme @ 2024-01-29 12:32:22


@[Terrible](/user/195942) 我知晓了,下面移动完指针也需要赋值,你这样直接并一步也是ok的 谢谢
by lightme @ 2024-01-29 12:35:57


|