一、
P1809 渡河问题
二、
P1325 雷达覆盖
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int N=100009;
int n,a[N];
LL ans;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
int m=n;
while(m)
{
if(m==1) ans+=a[1];
if(m==2) ans+=a[2];
if(m==3) ans+=a[1]+a[2]+a[3];
if(m<=3) break;
LL s=a[2]+a[1]+a[m]+a[2];//1,2过去,1回来,m,m-1过去,2回来
LL ss=a[m]+a[1]+a[m-1]+a[1];//1,m过去,1回来,1,m-1过去,1回来
ans+=min(ss,s);
m-=2;
}
printf("%lld",ans);
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define LL long long
using namespace std;
int n,d,ans;
struct H{
int l,r;
}q[100009];
bool vis[100009];
bool cmp(H a,H b)
{
return a.r<b.r;
}
int main()
{
scanf("%d%d",&n,&d);
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(d<abs(y)) {cout<<-1;return 0;}
int len=sqrt(d*d-y*y);
q[i].l=x-len,q[i].r=x+len;
}
sort(q+1,q+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
ans++;
for(int j=i+1;j<=n;j++)
if(q[j].l<=q[i].r&&q[j].r>=q[i].l)
vis[j]=1;
}
}
printf("%d\n",ans);
return 0;
}