When there is no optimization, TLE adds a binary optimization with a time of 50 ms. Powerful binary Optimization
AC code:
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;#define N 100005int a[N];int main(){int t;cin>>t;while(t--){int n,s;int su=0;scanf("%d%d",&n,&s);for(int i=0;i<n;i++){scanf("%d",&a[i]);su+=a[i];}if(su<s) { printf("0\n");continue;}int sum[N];bool flag=true;memset(sum,0,sizeof(sum));sum[0]=a[0];if(a[0]>=s) { printf("1\n");continue;}int len=N;for(int i=1;i<n;i++){sum[i]=sum[i-1]+a[i];if(a[i]>=s ) { len=1; flag=false;break;}if(sum[i]>=s){flag=false;int left=0,right=i-1,mid=(left+right)>>1;while(left!=right){if(sum[i]-sum[mid]<s)right=mid;else left=mid+1;mid =(left+right)>>1;}len=min(len,i-(left-1));}}if(flag) printf("0\n");else printf("%d\n",len);}return 0;}
Tle code:
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;#define N 100005int a[N];int main(){int t;cin>>t;while(t--){int n,s;int su=0;scanf("%d%d",&n,&s);for(int i=0;i<n;i++){scanf("%d",&a[i]);su+=a[i];}if(su<s) { printf("0\n");continue;}int sum[N];bool flag=true;memset(sum,0,sizeof(sum));sum[0]=a[0];if(a[0]>=s) { printf("1\n");continue;}int len=N;for(int i=1;i<n;i++){sum[i]=sum[i-1]+a[i];if(a[i]>=s ) { len=1; flag=false;break;}if(sum[i]>=s){flag=false;int j=i-1;while(j>=0&&sum[i]-sum[j]<s){j--;}len=min(len,i-(j));}}if(flag) printf("0\n");else printf("%d\n",len);}return 0;}