• HDU 4562 守护雅典娜


    const int MM = 1000+5;
    #define debug puts("wrong") 
    #define inf 1000000 
    #define mod 1000000007 
    int N,M,K, L;
    int g=1; void printcase() {printf("Case %d: ",g++);}
    struct Point{
        int x,y,r;
        bool friend operator<(Point a,Point b) {
            return a.r<b.r;
        } 
    }num1[MM],num2[MM];
    Point start, end;
    int cnt1, cnt2;
    int sqr(int x) {
        return  (x)*(x);
    } 
    int dis(Point a,Point b) {
        int tmp=sqr(a.x-b.x)+sqr(a.y-b.y);
        return tmp;
    }
    bool ok(Point a) {
        int t1=dis(a,end),t2=dis(a,start),rr=sqr(a.r); 
        if(t1==rr) return false;
        if(t2==rr) return false;
        if(t2>rr && t1<rr) return true;
        return false; 
    }
    bool ok1(Point a) {
        int t1=dis(a,end),t2=dis(a,start),rr=sqr(a.r); 
        if(t1==rr) return false;
        if(t2==rr) return false;
        if(t2<rr && t1>rr) return true;
        return false; 
    }
    bool in(Point a,Point b) {
        int t1=dis(a,b), rr=sqr(a.r-b.r);
        return t1<rr; 
    }
    bool out(Point a,Point b) {
        int t1=dis(a,b), rr=sqr(a.r+b.r);
        return t1>rr; 
    }
    void get_data() {
        int i,j,k; Point tmp;
        start.x=0, start.y=0; 
        scanf("%d%d%d",&N,&end.x,&end.y);
        for(i=cnt1=cnt2=0;i<N;i++) {
            scanf("%d%d%d",&tmp.x,&tmp.y,&tmp.r);
            if(ok1(tmp)) {
                num1[cnt1++]=tmp;
            }
            if(ok(tmp)) num2[cnt2++]=tmp;
        }
    //    printf("**%d %d**\n",cnt1,cnt2);
    }
    int dp1[MM], dp2[MM];
     
    void solve() {
        int i,j,k,tmp; 
        printcase();
        for(i=0;i<MM;i++) dp1[i]=dp2[i]=1;
     //   sort(num1,num1+cnt1);
        for(i=0;i<cnt1;i++) {
            for(j=tmp=0;j<cnt1;j++) {
                if(i==j) continue;
                if(in(num1[i],num1[j])) {
                    if(num1[i].r>num1[j].r) tmp=max(tmp,dp1[j]);
                }
                dp1[i]=tmp+1;
            }
        } 
    //    sort(num2,num2+cnt2);
        for(i=0;i<cnt2;i++) {
            for(j=tmp=0;j<cnt2;j++) {
                if(i==j) continue;
                if(in(num2[i],num2[j])) {
                    if(num2[i].r>num2[j].r) tmp=max(tmp,dp2[j]);
                }
                dp2[i]=tmp+1;
            }
        }  
        int ans=0;
    //    for(i=0;i<cnt1;i++) printf("**%d ",dp1[i]); printf("\n");
    //    for(i=0;i<cnt2;i++) printf("**%d ",dp2[i]); printf("\n");
        
        for(i=0;i<cnt1;i++) ans=max(ans,dp1[i]);
        for(i=0;i<cnt2;i++) ans=max(ans,dp2[i]);
        for(i=0;i<cnt1;i++) {
            for(j=0;j<cnt2;j++) {
                if(out(num1[i],num2[j])) ans=max(ans,dp1[i]+dp2[j]);
            }
        }
        printf("%d\n",ans);
    }
    View Code
  • 相关阅读:
    Uncaught TypeError: Illegal invocation
    数组循环
    二维码
    验证码
    user_agent
    ip
    jquery操作dom
    php 正则
    hdu 4850 Wow! Such String! 欧拉回路
    leetcode Maximal Rectangle 单调栈
  • 原文地址:https://www.cnblogs.com/zhang1107/p/3099380.html
Copyright © 2020-2023  润新知