51Nod1087 1 10 100 1000(dp)
阿新 • • 發佈:2018-12-22
這是一道很簡單的動態規劃題,用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; }