G. 2^Sort

https://codeforces.com/problemset/problem/1692/G

题意:给定n个数和一个长度k,寻找符合条件的长度为k + 1的区间数量。条件:将连续区间中的每个数从左到右依次与2^j次方相乘(j∈[0, k]),得到的连续区间严格递增。

思路:每个数都乘2的某个幂次,并且要求严格升序。那么如果当前的数大于前一个数的2分之1,则变换后的数满足升序的要求。所以维护一个长度变量,并判断当前数与前一个数的大小关系即可。注意,在不满足大小关系时,长度应该初始化1,这就相当于,在满足大小关系时,长度应该为2是一个道理。

inline void solve(){
    int n, k;
    cin >> n >> k;

    int len = 1;
    double pre;
    int ans = 0;
    for (int i = 0; i < n; ++i) {
        if (i == 0) {
            cin >> pre;
            continue;
        }
        double cur;
        cin >> cur;
        if (cur / pre > 0.5f) {
            len ++;
        }
        else {
            len = 1;
        }
        ans += len > k;
        pre = cur;
    }
    cout << ans << '\n';
}
posted @ 2025-02-25 09:30  _Yxc  阅读(1)  评论(0编辑  收藏  举报