poj 2189 / 3061 욕심 (연속 적 인 양우리 찾기 / 연속 적 인 하위 서열 의 합 이 limit 보다 큰 최 단 서열 찾기)
생각: 욕심 만 부리 면 된다.커서 i 와 j 두 개 를 설정 하여 한 번 훑 어보 세 요.고정 기점 i 가 조건 에 부합 할 수 있 는 가장 긴 구간 을 구 하 는 것 과 같다.
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
#define INF 0x3fffffff
#define clr(s,t) memset(s,t,sizeof(s))
#define N 1005
int n,m,c;
int s[N];
int main(){
int i,j,x,res,num;
scanf("%d %d %d",&m,&n,&c);
clr(s, 0);
for(i = 0;i<m;i++){
scanf("%d",&x);
s[x]++;
}
res = num = 0;
for(i = j = 1;i<n;i++){
num -= s[i-1];
while(num <= c && j<n){
num += s[j];
j++;
}
res = max(res,j-i-1);
if(j == n){
if(num <= c)// wa
res = max(res,j-i);
break;
}
}
printf("%d
",res);
return 0;
}
poj 3061 제목: 하위 서열 의 길 이 를 구 합 니 다. 이 하위 서열 의 합 은 지정 한 값 limit 보다 크 고 길이 가 가장 작 아야 합 니 다. 이 서열 의 최소 길 이 를 구 해 야 합 니 다.
사고: 위 와 같이 두 개의 커서 를 설정 하고 왼쪽 에서 오른쪽으로 O (n) 를 한 번 스 캔 하면 됩 니 다.사전 처리 로 n 항 과 배열 을 구하 면 위 에서 처리 하 는 것 이 더 편리 합 니 다.
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
#define INF 0x3fffffff
#define clr(s,t) memset(s,t,sizeof(s));
#define N 100005
int s[N],n,m,T;
int main(){
scanf("%d",&T);
while(T--){
int i,j,res=INF,now = 0;
scanf("%d %d",&n,&m);
for(i = 1;i<=n;i++)
scanf("%d",&s[i]);
for(i = 1,j = 0;j<=n;){
while(now<m && j<n)
now += s[++j];
if(now<m && j>=n)
break;
res = min(res,j-i+1);
while(now >= m && i<j)
now -= s[i++];
if(now>=m && i==j){
res = 1;
break;
}
res = min(res,j-i+2);
}
if(res == INF)
printf("0
");
else
printf("%d
",res);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.