2014 北京区域赛题目

来源:互联网 发布:中国10月经济数据 编辑:程序博客网 时间:2024/06/06 16:28

按照时间排个序算个斜率。

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<map>#include<vector>#include<set>#include<ctime>#include<bitset>#define LL long long#define db double#define EPS 1e-15#define inf 1e10#define pa pair<int,int>using namespace std;struct Point {    int t,x;};int cmp(Point a,Point b){    return a.t<b.t;}Point p[10005];int main(){    int T,cas=1;    scanf("%d",&T);    while (T--){        int n;        scanf("%d",&n);        for (int i=0;i<n;i++){            scanf("%d%d",&p[i].t,&p[i].x);        }        sort(p,p+n,cmp);        db max=-1,v;        for (int i=1;i<n;i++){            v=db(1.0*abs(p[i].x-p[i-1].x)/(p[i].t-p[i-1].t*1.0));            if (v>max) max=v;        }        printf("Case #%d: %.2lf\n",cas++,max);    }    return 0;}


K

直接的题意是求逆序对数,但是线性的扫一下如果后面有比这个数小的就搞一下,O(n)搞定。

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<map>#include<vector>#include<set>#include<ctime>#include<bitset>#define LL long long#define db double#define EPS 1e-15#define inf 1e10#define pa pair<int,int>using namespace std;int a[1000010];int main(){    int t,ii,n,i,Min,ans;    scanf("%d",&t);    for (ii=1;ii<=t;ii++)    {        scanf("%d",&n);        for (i=1;i<=n;i++)            scanf("%d",&a[i]);        Min=a[n];        ans=0;        for (i=n-1;i>=1;i--)        {            if (a[i]>Min) ans++;                else Min=a[i];        }        printf("Case #%d: %d\n",ii,ans);    }}


I

求圆环面积交,画图推公式得面积为  大圆交-2*小圆大圆交+小圆交。

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#define inf 0x7fffffff#define exp 1e-10#define PI 3.141592654using namespace std;typedef long long ll;struct Point{    double x,y;    Point (double x=0,double y=0):x(x),y(y){}};double dist(Point a,Point b){    double x=(a.x-b.x)*(a.x-b.x);    double y=(a.y-b.y)*(a.y-b.y);    return sqrt(x+y);}double Area_of_overlap(Point c1,double r1,Point c2,double r2){    double d=dist(c1,c2);    if (r1+r2<d+exp) return 0;    if (d<fabs(r1-r2)+exp)    {        double r=min(r1,r2);        return PI*r*r;    }    double x=(d*d+r1*r1-r2*r2)/(2*d);    double t1=acos(x/r1);    double t2=acos((d-x)/r2);    return r1*r1*t1+r2*r2*t2-d*r1*sin(t1);}int main(){    int t,ncase=1;    double r,R;    Point a,b;    scanf("%d",&t);    while (t--)    {        scanf("%lf%lf",&r,&R);        scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);        double bb_area=Area_of_overlap(a,R,b,R);        double bs_area=Area_of_overlap(a,R,b,r);        double ss_area=Area_of_overlap(a,r,b,r);        printf("Case #%d: %.6lf\n",ncase++,bb_area-2.0*bs_area+ss_area);    }    return 0;}


0 0