http://codeforces.com/contest/842
给定一个区间l到r a到b。、
问你是否存在一个整数 x属于l,r, y属于a-b,他们的比例x/y等于k。
因为x,y是整数,所以并不是连续的。不能通过计算这两个区间的最大斜率和最小斜率然后比较。
枚举一个区间即可。
#include <bits/stdc++.h>
using namespace std;
/*
*/
double a1[5];
int main()
{ double l,r,a,b,k;
cin>>l>>r>>a>>b>>k;
if(l>r) swap(l,r);
if(a>b) swap(a,b);
bool flag=false;
for(int i=a;i<=b&&!flag;i++){
if(k*i>=l&&k*i<=r){
flag=true;
}
}
if(flag)
puts("YES");
else
puts("NO");
return 0;
}
B,直接计算圆心的距离,
#include <bits/stdc++.h>
using namespace std;
vector<pair<double,double> >q;
int main()
{ double m,n;
double a,b,c,s;
int t;
scanf("%lf%lf",&m,&n);
double l=m-n;double r=m;
scanf("%d",&t);
for(int i=0;i<t;i++){
scanf("%lf%lf%lf",&a,&b,&c);
a=fabs(a),b=fabs(b);
s=sqrt(a*a+b*b);
q.push_back(make_pair(s-c,s+c));
}
int sum=0;
for(int i=0;i<q.size();i++){
if(q[i].first>=l&&q[i].second<=r)
sum++;
}
printf("%d\n",sum);
return 0;
}
CD一个字典树,一个树形dp