-thứ 2 thuật toán của em cũng ko đúng vs bài này. độ phức tạp là n^2 nên sẽ TLE.
vậy tóm lại bài này sai vì input sai.
và nếu sửa lại đúng input thì sẽ dính LTE

#include <iostream> using namespace std; int main() { int n, k; cin >> n >> k; int a[100000]; for (int i = 0; i < n; i++) cin >> a[i]; a[n++] = 0; int m = n, s, l; for (int i = 0; i < n; i++) { s = a[i], l = 1; for (int j = i + 1; j < n; j++) { if (s >= k) { if (l < m) m = l; break; } s += a[j]; l++; } } if (m > n - 1 || n - 1 == 1 && a[0] < k) { cout << 0 << '\n'; return 0; } if (n - 1 == 1 && a[0] >= k) { cout << 1 << '\n'; return 0; } cout << m << '\n'; return 0; }
#include <stdio.h>
#include <stdlib.h>
unsigned long long minSubArray(int s,int* a,unsigned long long n)
{
unsigned long long sum=a[0],head=0,tail=0,min=n+1;
while(tail<n)
{
if(tail-head+1<min && sum>=s) min=tail-head+1;
if(sum>=s) sum-=a[head++];
else sum+=a[++tail];
if(head>tail) tail=head;
}
return min==n+1?0:min;
}
int main()
{
unsigned long long n,s;
while(scanf("%llu%llu",&n,&s)==2)
{
int* a;
a=(int*)calloc(sizeof(int),n);
unsigned long long i;
for(i=0;i<n;i++) scanf("%d",&a[i]);
printf("%llu\n",minSubArray(s,a,n));
}
return 0;
}
Leave a comment: