万万没想到之抓捕孔连顺

万万没想到之抓捕孔连顺_牛客网

https://www.nowcoder.com/practice/c0803540c94848baac03096745b55b9b?tpId=98&tqId=33007&tPage=2&rp=2&ru=/ta/2019test&qru=/ta/2019test/question-ranking

主要思路就是每读取一个数字,就判断窗口是否满足最大值减去最小值不大于距离D;
由于每次进行计算组合之后,窗口的begin都会往前移动一位,所以计算组合应该采用固定首位的方法,即固定首位有一人,接下来的位置的可能性,这样就可以保证窗口移动过程不会出现重复,因为下一次判断已经不包含上一个的首位置了。

#include <iostream> 
#include <vector>
using namespace std;

long long C(long long n) {
    return (n-1) * n / 2;
}

int main()
{
    int N, D; cin>> N >> D;
    long long count = 0;
    vector<int> res(N);
    for (int end = 0, begin = 0; end < N; end++) {
        cin>> res[end];
        while (end >= 2 && (res[end] - res[begin]) > D) {
            begin++;//不满足则begin往前移动
        }
        count += C(end - begin);//由于判断一次往前移动(for循环中的end++),即可以采用每次固定首位的组合。
    }
    cout << count % 99997867;
}
全部评论

相关推荐

04-02 16:49
门头沟学院 Java
_bloodstream_:我也面了科大讯飞,主管面的时候听说急招人优先考虑能尽快实习的,我说忙毕设,后面就一直没消息了
点赞 评论 收藏
分享
03-21 08:46
已编辑
门头沟学院 C++
一个什么都不会的学生:当你有硕士学历的时候HR会说就是比本科生强
点赞 评论 收藏
分享
评论
26
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务