| 记录编号 |
460335 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
2848.obc |
最终得分 |
100 |
| 用户昵称 |
Bennettz |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
0.163 s |
| 提交时间 |
2017-10-16 20:54:19 |
内存使用 |
2.58 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 100005
struct Node{
int x,y;
bool operator <(const Node&b)const{
if(x!=b.x)return x<b.x;
else return y<b.y;
}
}a[maxn],b[maxn];
int l[maxn],r[maxn];
int n,k,l1;
inline int sum(Node a[]){
int ans=0,s=0,ma=0;
sort(a,a+n);
l[0]=1;
for(int i=1;i<n;i++){
if(a[i].x!=a[i-1].x){
s=i;
l[i]=i-s+1;
}
else{
while(a[i].y-a[s].y>l1){
s++;
}
l[i]=i-s+1;
}
}
s=n-1,r[n-1]=1;
for(int i=n-2;i>=0;i--){
if(a[i].x!=a[i+1].x){
s=i;
r[i]=s-i+1;
}
else{
while(a[s].y-a[i].y>l1){
s--;
}
r[i]=s-i+1;
}
}
if(k==1){
for(int i=0;i<n;i++){
ans=max(ans,l[i]);
}
}
else{
ma=0;
for(int i=0;i<n;i++){
ma=max(ma,l[i]);
ans=max(ans,ma+r[i+1]);
}
}
return ans;
}
int main(){
freopen("obc.in","r",stdin);
freopen("obc.out","w",stdout);
scanf("%d%d%d",&n,&k,&l1);
if(!k){
printf("0");
return 0;
}
for(int i=0;i<n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
b[i].x=a[i].y,b[i].y=a[i].x;
}
int ans=max(sum(a),sum(b));
printf("%d",ans);
return 0;
}