1. 程式人生 > >51Nod1087 1 10 100 1000(dp)

51Nod1087 1 10 100 1000(dp)

 這是一道很簡單的動態規劃題,用dp[i]存下所以1出現的下標,然後用二分查詢,如果能在dp中找到,就說明是1。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
long long dp[100000];
int Find(int x)
{
	int r=100000,l=0;
	while(l<=r)
	{
		int mid=(r+l)/2;
		if(dp[mid]==x) return 1;
		if(dp[mid]<x) l=mid+1;
		else r=mid-1;
	}
	return 0;
}
int main()
{
	int temp=0;
	dp[0]=0;
	for(long long i=1;i<100000;i++,temp++)
		dp[i]=i+dp[i-1];
	int T;
	cin>>T;
	while(T--)
	{
		int a;
		cin>>a;
		if(Find(a-1)) cout<<"1"<<endl;
		else cout<<"0"<<endl;
	}
	return 0;
}