咦,时间复杂度没问题咋还T呢。
查看原帖
咦,时间复杂度没问题咋还T呢。
378220
AmaZingFantasy楼主2021/7/31 21:39

我的方法:把所有在序列里为 11 的点计算出来,存入set。输入时再循环访问set,看看是否为 11。再输出。时间复杂度 O(nlogn)O(n \log n)

此题给的数据:N1500000N \leq 1500000 ai109a_i \leq 10^{9}

我计算了一下:

log210930\log_210^{9} \approx 30

15×105×30=450000000.5×10715 \times 10^5 \times 30 = 45000000 \approx 0.5 \times 10^7

按理说能过,我也开了 o2,但为啥还是T呢,求大佬指教。

最后附上代码:

#include <iostream>
#include <set>
using namespace std;
typedef long long l;
l arr[45005];
int main(){
    l xb=1;
    set<l>he;
    while(arr[xb-1] <= 1000000000){
        arr[xb]=arr[xb-1]+xb;
        he.insert(arr[xb-1]);
        xb++;
    }
    l k;
    cin>>k;
    for(l i=0;i<k;i++){
        l m;
        cin>>m;
        if(he.count(m-1)==1){
            cout<<1<<endl;
        }else{
            cout<<0<<endl;
        }
    }
    return 0;
}
2021/7/31 21:39
加载中...