wenbao与尺取法
1 void worm_solve(){ 2 int res=MAX; 3 int s=0,t=0,sum=0; 4 for(;;){ 5 while(t<n && sum < S){ 6 sum+=a[t++]; 7 } 8 if(sum<S) break; 9 res=min(res,t-s); 10 sum-=a[s++]; 11 } 12 if(res>n){ 13 res=0; 14 } 15 printf("%d\n",res); 16 }
1 #include <iostream> 2 #include <set> 3 #include <map> 4 #include <stdio.h> 5 using namespace std; 6 7 const int maxn = 1e6+10; 8 set<int> s; 9 map<int ,int >m; 10 int a[maxn],n; 11 12 int main(){ 13 scanf("%d",&n ); 14 for(int i=0;i<n;i++){ 15 scanf("%d", &a[i]); 16 s.insert(a[i]); 17 } 18 int len = s.size(); 19 int l=0,r=0,num=0,sum=0,mi=maxn; 20 while(l<=r&&l<n){ 21 while(num<len&&r<n){ 22 m[a[r]]++; 23 if(m[a[r]]==1) num++; 24 r++; 25 } 26 if(num==len){ 27 mi=min(mi,r-l); 28 } 29 if(m[a[l]]==1) num--; 30 m[a[l]]--; 31 l++; 32 } 33 printf("%d\n",mi ); 34 return 0; 35 }
只有不断学习才能进步!