zoj3123 Subsequence//最短序列和

毫无优化时,TLE, 加入二分优化,时间为50ms.强大的二分

AC代码:

#include
#include
#include
using namespace std;
#define N 100005
int 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=s) { printf("1\n");continue;}
		int len=N;
		for(int i=1;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]>1;
				}
				len=min(len,i-(left-1));
			}
		}
		if(flag) printf("0\n");
		else printf("%d\n",len);
	}
	return 0;
}
TLE代码:

#include
#include
#include
using namespace std;
#define N 100005
int 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=s) { printf("1\n");continue;}
		int len=N;
		for(int i=1;i=s ) { len=1; flag=false;break;}
			if(sum[i]>=s)
			{
				flag=false;
				int j=i-1;
				while(j>=0&&sum[i]-sum[j]


你可能感兴趣的:(zoj3123 Subsequence//最短序列和)