11536 - Smallest Sub - Array (슬라이딩 창)
모든 요소 가 한 번 만 삽입 되 어 삭제 되 기 때문에 시간 복잡 도 는 O (n) 입 니 다.
이 알고리즘 은 길이 가 알 수 없 는 연속 구간 을 처리 하고 답 이 나 올 때 까지 구간 의 시작 과 끝 을 반복 적 으로 추진 하 는 것 이 특징 인 '취 척 법' 이라는 이름 도 있다.
자세 한 참조 코드:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000000 + 10;
int T,n,m,k,Case = 0,a[maxn],cnt[maxn];
map<int,int> p;
vector<int> g[105];
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d%d%d",&n,&m,&k);
memset(cnt,0,sizeof(cnt));
a[1] = 1; a[2] = 2; a[3] = 3;
if(n>3) for(int i=4;i<=n;i++) {
a[i] = (a[i-1]+a[i-2]+a[i-3])%m + 1;
}
int ans = 2000000000;
int rear = 0,last = 1,c = 0;
while(true) {
if(c == k) {
cnt[a[last]] -- ;
if(cnt[a[last]] == 0 && a[last] <= k) c--;
last++;
if(c == k) ans = min(ans , rear - last + 1);
}
else {
rear ++;
if(rear > n) break;
cnt[a[rear]]++;
if(cnt[a[rear]] == 1 && a[rear] <= k) c++;
if(c == k) ans = min(ans , rear - last + 1);
}
}
printf("Case %d: ",++Case);
if(ans != 2000000000) printf("%d
",ans);
else printf("sequence nai
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ACM - 계산 기하학 적 Pick - up sticks -- poj 2653Description Stan has n sticks of various length. The data for each case start with 1 <= n <= 100000, the number of stick...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.