hihocoder #1607 : H星人社交网络(双指针)
2024-09-04 17:45:44
传送门
题意
分析
可知对与某个数x,设其可发送信息的边界为[L,R],那么随着x的递增,[L,R]也右移,故可对输入数排序,做一次双指针即可
trick
代码
//1. Aj < 1/8 * Ai + 8 或者
//2. Aj > 8 * Ai + 8 或者
//3. Ai < 88888 且 Aj > 88888
/*
i不会给j发消息当且仅当
8*a[j]<a[i]+64
a[j]>8*a[i]+8
a[i]<88888&&a[j]>88888
可行区间
1:9~16
2:9~24
9:10~80
10:10~88
11:10~96
...
16:10~136
17:11~144
11110:1397~88888
11112:1397~88888
88888:11103~88888
88889:88888~100000
100000:88888~100000
*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
int x,sz;
vector<int>v;
int main()
{
int n;
cin>>n;
F(i,1,n)
{
scanf("%d",&x);
v.push_back(x);
}
sort(v.begin(),v.end());
sz=v.size();
ll ans=0;
int l=0,r=-1;
R(i,0,sz)
{
while(l<sz&&v[l]*8<v[i]+64) l++;
while(r+1<n&&v[r+1]<=8*v[i]+8&&(v[i]>=88888||v[r+1]<=88888)) r++;
ans+=r-l+1;
if(i>=l&&i<=r) ans--;
}
printf("%lld\n",ans );
return 0;
}
最新文章
- BZOJ2109: [Noi2010]Plane 航空管制
- Bzoj3531: [Sdoi2014]旅行
- web配置详解
- hbase操作的问题
- php中var_export与var_dump的区别分析
- CentOS安装nvidia显卡驱动
- CSS jQuery HTML5 CSS3
- IIS 7.5 配置伪静态
- HDOJ 1272 并查集 不相同父节点
- servlet 用法
- sql server两种分页方法
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
- ZOJ3541 The Last Puzzle
- vim搭建笔记
- Windows10安装pycocotools方法,亲测可用!
- gitbook build 报错
- ultraEdit MAC 破解方法
- FastReport报表打印总页数的问题?
- CodeLite C/C+ IDE更新放出
- mapreduce的输入格式 --- InputFormat
热门文章
- Openlayers中layer介绍
- Java开发面试题
- c/c++标准库中的文件操作总结
- cenos 6.5 安装apache 2.4.28出现种问题
- Machine Learning in Action(1) K-近邻
- machine learning for hacker记录(1) R与机器学习
- Struts2页面遍历
- iOS 设备获取唯一标识符汇总
- MFC窗口消息PostMessage和SendMessage
- Gym - 100187A A - Potion of Immortality —— 贪心