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';
}