Codeforces Round #430 (Div. 2)A,B

来源:互联网 发布:c语言计算排列组合 编辑:程序博客网 时间:2024/05/17 07:40

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