acm常用技巧三 POJ 3279

来源:互联网 发布:js loadasync load 编辑:程序博客网 时间:2024/05/16 05:09

一.POJ 3279

const int dx[]={-1,0,0,0,1};const int dy[]={0,-1,0,1,0};int M,N;int tile[MXN][MXN];int opt[MXM][MXN];int flip[MXM][MXN];int get(int x,int y){    int c=tile[x][y];    for(int d=0;d<5;++d){        int x2=x+dx[d],y2=y+dy[d];        if(0<=x2&&x2<M&&0<=y2&&y2<N)            c+=flip[x2][y2];    }    return c%2;}int calc(){    for(int i=1;i<M;++i)        for(int j=0;j<N;++j)            if(get(i-1,j))            {                flip[i][j]=1;            }    for(int j=0;j<N;++j)        if(get(M-1,j)){            return -1;        }    int res=0;    for(int i=0;i<M;++i)        for(int j=0;j<N;++j)            res+=flip[i][j];    return res;}void Fun(){    int res=-1;    for(int i=0;i<1<<N;++i){        memset(flip,0,sizeof(flip));        for(int j=0;j<N;++j)            flip[0][N-j-1]=i>>j&1;        int num=calc();        if(num>=0&&(res<0||res>num)){            res=num;            memcpy(opt,flip,sizeof(flip));        }    }    if(res<0)        puts("IMPOSSIBLE");    else{        for(int i=0;i<M;++i)            for(int j=0;j<N;++j)                printf("%d%c",opt[i][j],j+1==N?'\n':' ');    }}

二.POJ 3684

const double g=10.0;int N,H,R,T;double y[MXN];double calc(int T){    if(T<0) return H;    double t=sqrt(2*H/g);    int k=(int)(T/t);    if(k%2==0){        double d=T-k*t;        return H-g*d*d/2;    }else{        double d=k*t+t-T;        return H-g*d*d/2;    }}void Fun(){    for(int i=0;i<N;++i)        y[i]=calc(T-i);    sort(y,y+N);    for(int i=0;i<N;++i)        printf("%.2f%c",y[i]+2*R*i/100.0,i+1==N?'\n':' ');}

三.POJ 2785

void Fun(){    for(int i=0;i<n;++i)        for(int j=0;j<n;++j)            CD[i*n+j]=C[i]+D[j];    sort(CD,CD+n*n);    LL res=0;    for(int i=0;i<n;++i)        for(int j=0;j<n;++j){            int cd=-(A[i]+B[j]);            res+=upper_bound(CD,CD+n*n,cd)-lower_bound(CD,CD+n*n,cd);        }    printf("%lld\n",res);}




原创粉丝点击