POJ 3061 Subsequence
2014-08-31 17:59
274 查看
链接:http://poj.org/problem?id=3061
尺取法,《挑战程序设计竞赛》P146
从第一个数字开始,向后扫描。直到sum>=S为止,计算出长度,再从第二个数字开始,直到sum>=S,,计算出长度....
扫描过一遍后,取最小值即可
#include <iostream>
#include<cstdio>
using namespace std;
#define MAX_N 100000
int data[MAX_N];
int N,S;
void solve()
{
int ans=N+1;
int s=0,t=0,sum=0;
for(;;)
{
while(t<N&&sum<S)
sum+=data[t++];
if(sum<S)
break;
ans=min(ans,t-s);
sum-=data[s++];
}
if(ans>N)
ans=0;
cout<<ans<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>N>>S;
for(int i=0;i<N;i++)
scanf("%d",&data[i]);
solve();
}
return 0;
}
尺取法,《挑战程序设计竞赛》P146
从第一个数字开始,向后扫描。直到sum>=S为止,计算出长度,再从第二个数字开始,直到sum>=S,,计算出长度....
扫描过一遍后,取最小值即可
#include <iostream>
#include<cstdio>
using namespace std;
#define MAX_N 100000
int data[MAX_N];
int N,S;
void solve()
{
int ans=N+1;
int s=0,t=0,sum=0;
for(;;)
{
while(t<N&&sum<S)
sum+=data[t++];
if(sum<S)
break;
ans=min(ans,t-s);
sum-=data[s++];
}
if(ans>N)
ans=0;
cout<<ans<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>N>>S;
for(int i=0;i<N;i++)
scanf("%d",&data[i]);
solve();
}
return 0;
}
相关文章推荐
- [POJ 3061] Subsequence
- 【POJ】3061 Subsequence
- 【poj 3061】Subsequence 【尺取法】or【前缀和+二分】
- POJ 3061-Subsequence(尺取法,二分)
- POJ 3061 - Subsequence(尺取法)
- poj 3061 Subsequence
- POJ_3061 Subsequence
- 【poj 3061】Subsequence
- POJ 3061 Subsequence(尺取法)
- 146_尺取法 subsequence (POJ No 3061)
- POJ - 3061 Subsequence
- 【poj】 3061 Subsequence 尺取法
- poj-3061-subsequence
- poj 3061 Subsequence
- POJ - 3061 Subsequence
- poj 3061 Subsequence
- POJ 3061 Subsequence
- Subsequence 【poj-3061】【二分搜索】
- POJ 3061 Subsequence【尺取法】
- poj--3061--Subsequence(技巧)