洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
生活随笔
收集整理的這篇文章主要介紹了
洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
P1795 無窮的序列_NOI導刊2010提高(05)
題目描述
有一個無窮序列如下:
110100100010000100000…
請你找出這個無窮序列中指定位置上的數字
輸入輸出格式
輸入格式:?
第一行一個正整數N,表示詢問次數;
接下來的N行每行一個正整數Ai,Ai表示在序列中的位置。
?
輸出格式:?
N行,每行為0或l,表示序列第Ai位上的數字。
?
輸入輸出樣例
輸入樣例#1:?復制 4 3 14 7 6 輸出樣例#1:?復制 0 0 1 0說明
對于100%的數據有N≤1500000,Ai≤10^9
思路:前綴和+二分。
#include<map> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; map<int,bool>ma; int n,x,sum=1; int main(){scanf("%d",&n);for(int i=1;i;i++){ma[sum]=1,sum+=i;if(sum>1000000000) break; }while(n--){scanf("%d",&x);if(ma[x]) printf("1\n");else printf("0\n");} } STL TLE 90分 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int ma[44722]; int l,r,mid; int n,x,sum=1; int main(){scanf("%d",&n);ma[1]=1;for(int i=2;i<=44721;i++)ma[i]=ma[i-1]+i-1;while(n--){scanf("%d",&x);l=1;r=44721;int flag=0;for(int i=1;i<=32;i++){mid=(l+r)/2;if(ma[mid]<x) l=mid+1;else if(ma[mid]>x) r=mid-1;else if(ma[mid]==x){ flag=1;break; }}if(flag) printf("1\n");else printf("0\n");} }?
轉載于:https://www.cnblogs.com/cangT-Tlan/p/7892264.html
總結
以上是生活随笔為你收集整理的洛谷 P1795 无穷的序列_NOI导刊2010提高(05)的全部內容,希望文章能夠幫你解決所遇到的問題。