• codeforces 895B XK Segments

  • 题目大意:

  • 寻找符合要求的\((i,j)\)对,有:$$a_i \le a_j $$
  • 同时存在\(k\),且\(k\)能够被\(x\)整除,\(k\)满足:$$a_i \le k \le a_j$$
  • 思路:

  • 整体数组排序,对于当前\(a_i\)寻找符合条件的\(a_j\)的最大值和最小值
  • 有:$$(a_i-1)/x+k=a_j/x$$
  • 所以可以通过二分查找获得,这里我寻找\(((a_i-1)/x+k)*x\)为下界,\(((a_i-1)/x+k+1)*x\)为上界。
  • 注意1:下届需要和\(a_i\)比较大小,有可能小于\(a_i\)。上届不需要,它一定大于等于\(a_i\)
  • 注意2:最后寻找出来的对数和结果会大于\(int\),所以使用\(long long\)
  • 注意3:\(scanf\)与\(cin\)不要混用,o(╥﹏╥)o
  • 代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+5;
ll a[maxn];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll n,x,k,cnt;
cin>>n>>x>>k;
for(ll i=0;i<n;++i) cin>>a[i];
sort(a,a+n);
cnt=0;
for(ll i=0;i<n;++i) {
ll l=max(((a[i]-1)/x+k)*x,a[i]);
ll r=((a[i]-1)/x+k+1)*x;
cnt+=lower_bound(a,a+n,r)-lower_bound(a,a+n,l);
}
cout<<cnt<<endl;
return 0;
}

最新文章

  1. C学习
  2. No bootable device-insert boot disk and press any key
  3. [转]Android ORM系列之GreenDao最佳实践
  4. QTP不能打开或者新建FunctionLibrary的解决方法
  5. php编程冒泡排序
  6. FutureTask 测试用例
  7. 201521123107 《Java程序设计》第14周学习总结
  8. Android 之异步任务(AsyncTask,Handler,Message,looper)
  9. java面向对象的三大特性——继承
  10. easyui的datagrid改变整行颜色
  11. Java集合之Vector源码分析
  12. linux网络 skb_buff
  13. Android在初始化时弹出popwindow的方法
  14. html+css实现小米商城首页静态页面
  15. maven分开打包jar文件和依赖jar包和资源文件
  16. Timer和ScheduledExecutorService区别
  17. 【atcoder】Two Sequences [arc092 D](思维题)
  18. svn显示提交人以及时间
  19. 卸载jrebel
  20. 【Python图像特征的音乐序列生成】如何生成旋律(大纲),以及整个项目的全部流程

热门文章

  1. MySQL(十六)之MySQL用户管理
  2. 无所不会的fiddler遇到的尴尬
  3. 前端安全之CSRF攻击
  4. JAVA 通过 Socket 实现 TCP 编程
  5. ionic3 打包安卓平台环境搭建报错解决方案总结
  6. mac android apk反编译
  7. 一款特好用的JavaScript框架——JQuery
  8. Cordova cannot add Android failed with exit code ENOENT
  9. MySQL索引与Index Condition Pushdown
  10. MySQL Flush Data