zoukankan      html  css  js  c++  java
  • Codeforces 895 B XK Segments 思维 二分

      题目链接: http://codeforces.com/contest/895/problem/B

      题目描述: 给你长度为n的数列a,然后让你找出所有的对(i,j)满足ai≤aj并且[ai,aj]中能整除X的数有且仅能有k个,问这样的对数总数。其中(i,j) 与(j,i),i≠j视为不同对,(i,i)与(i,i)为同一对。

      解题思路: 排序, 找出满足K的区间的长度(二分), 当a[i]是x的倍数的时候需要特判

      代码: 

    #include <iostream>
    #include <queue>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <list>
    #include <iterator>
    #include <cmath>
    #include <cstring>
    #include <forward_list>
    using namespace std;
    
    
    const int maxn = 1e5 + 10;
    typedef long long ll;
    ll a[maxn];
    
    int main() {
    
        std::ios::sync_with_stdio(false);
        cin.tie(0); 
        cout.tie(0);
        ll n, x, k;
        cin >> n >> x >> k;
        for(int i = 0; i < n; i++) {
            cin >> a[i];
        }        
        sort(a, a+n);
        ll res = 0;
        for(int i = 0; i < n; i++) {
            ll z = a[i] / x;
            ll l = (z+k)*x;
            ll r = l + x;
            if(a[i] % x == 0) l = (z+k-1)*x, r = l + x;
            l = max(a[i], l);
            l = lower_bound(a, a+n, l) - a;
            r = lower_bound(a, a+n, r) - a;
            res += r - l;
        }
        cout << res << endl;
        return 0;
    }
    View Code

      思考: 这题我很烦, 没有做出来, 自己就是记不得二分啊, 总是忘, 为什么啊, 真的伤, 这是打的最差的一场CF了, 新疆区域赛我得好好打!

  • 相关阅读:
    全网最贴心webpack系列教程和配套代码
    webpack4 系列教程(十五):开发模式与webpack-dev-server
    CSS元素显示模式
    CSS符合选择器
    Emmet语法
    CSS引入方式
    CSS文本属性
    CSS字体属性
    CSS语法规范一
    案例
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/7932046.html
Copyright © 2011-2022 走看看