| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Time Limit Error~还能有什么方法可以提高效率//poj3036.cpp
//Problem A:Subsequence
/*Algorithm:
1. the length of subsequence from 1 to n
2. length = S / average
*/
#include <iostream>
using namespace std;
int v[100000];
int nums,N,S;
void Input(int nums)
{
for(int i=0; i<nums; i++)
cin >> v[i];
}
int Average()
{
int sum = 0;
for (int i=0; i<N; i++)
sum += v[i];
const average = sum / N;
return average;
}
bool Solve(const int length)
{
int sum = 0; // sum of nums of length
for (int i=0; i<length; i++)
sum += v[i];
for (i=0; i<N-length+1; i++)
{
if (sum >= S) return true;
sum += v[i+length] - v[i];
}
return false;
}
int main()
{
cin >> nums;
while(nums--)
{
cin >> N >> S;
Input(N);
/* minimal_length */
int minimal_length = S / Average();
if ( Solve(minimal_length) == true )
while(1)
{
minimal_length--;
if ( Solve(minimal_length) == false ) {minimal_length++; break; }
}
else if ( Solve(minimal_length) == false )
while(1)
{
minimal_length++;
if ( Solve(minimal_length) == true) break;
}
/* minimal_length */
cout << minimal_length << endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator