• hdu 4739 Zhuge Liang's Mines


    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    #define Max 40
    struct Node
    {
        int x,y;
        bool flag;
    } p[Max];
    bool cmp(Node p1, Node p2)
    {
        if(p1.y<p2.x)return true;
        if(p1.y==p2.y&&p1.x<p2.x)return true;
        return false;
    }
    int Judge(Node p1,Node p2,Node p3,Node p4)
    {
        if(p1.x==p3.x&&p2.x==p4.x&&p1.y==p2.y&&p3.y==p4.y)
        {
            if(p4.y-p2.y==p4.x-p3.x)
                return true;;
        }
        return false;
    }
    /*
    bool cmp(node a,node b)
    {
        if(a.x < b.x) return true;
        if(a.x == b.x)
            if(a.y < b.y) return true;
        return false;
    }
    
    bool Judge(Node a,Node b,Node c,Node d)
    {
        if(a.x == b.x && c.x == d.x)
        {
            if(a.y == c.y && b.y == d.y)
            {
                if(b.y-a.y==c.x-a.x)return true;
            }
        }
        return false;
    }*/
    
    int main()
    {
        int n,i,j,k,l;
        while(scanf("%d",&n)!=EOF&&n!=-1)
        {
            for(i=0; i<n; i++)
            {
                scanf("%d %d",&p[i].x,&p[i].y);
                p[i].flag=true;
            }
    
            sort(p,p+n,cmp);
            //for(i=0;i<n;i++)
            //printf("#%d %d
    ",p[i].x,p[i].y);
            int ans=0,x=0;
            for(i=0; i<n; i++)
                for(j=i+1; j<n; j++)
                    for(k=j+1; k<n; k++)
                        for(l=k+1; l<n; l++)
                            if(p[i].flag&&p[j].flag&&p[k].flag&&p[l].flag)
                            {
                                if(Judge(p[i],p[j],p[k],p[l]))
                                {
                                    x+=4;
                                    p[i].flag=false;
                                    p[j].flag=false;
                                    p[k].flag=false;
                                    p[l].flag=false;
                                }
                            }
            printf("%d
    ",x);
        }
        return 0;
    }

    Q1:为什么按x排序就过,按y排序过不了?

    Q2:虐心的暴搞啊!有点贪心的意思(找最近的四点构成的正方形)、

    搜索:

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    #define Max 40
    struct Node
    {
        int x,y;
        bool flag;
    }p[Max];
    /*bool cmp(Node p1,Node p2)
    {
        if(p1.x<p2.x)return true;
        if(p1.x==p2.x&&p1.y<p2.y)return true;
        return false;
    }*/
    bool cmp(Node p1,Node p2)
    {
        if(p1.y<p2.y)return true;
        if(p1.y==p2.y&&p1.x<p2.x)return true;
        return false;
    }
    
    int n,ans;
    int Check(int x,int y)
    {
        for(int i=0;i<n;i++)
        if(p[i].flag&&p[i].x==x&&p[i].y==y)return i;
        return -1;
    }
    void Dfs(int num)
    {
        int i,j;
        if(num>ans)
            ans=num;
        for(i=0;i<n;i++)
        {
            if(p[i].flag)
            {
                for(j=i+1;j<n;j++)
                if(p[j].flag)
                {
                    if(p[j].x-p[i].x==p[j].y-p[i].y&&p[i].x!=p[j].x)
                    {
                        int k=Check(p[i].x,p[j].y);
                        int l=Check(p[j].x,p[i].y);
                        if(k!=-1&&l!=-1)
                        {
                            p[i].flag=false;
                            p[j].flag=false;
                            p[k].flag=false;
                            p[l].flag=false;
                            Dfs(num+1);
                            p[i].flag=true;
                            p[j].flag=true;
                            p[k].flag=true;
                            p[l].flag=true;
                        }
                    }
                }
            }
        }
    }
    int main()
    {
        int i;
        while(scanf("%d",&n)!=EOF&&n!=-1)
        {
            for(i=0;i<n;i++)
            {
                scanf("%d %d",&p[i].x,&p[i].y);
                p[i].flag=true;
            }
            sort(p,p+n,cmp);
            ans=0;
            Dfs(0);
            printf("%d
    ",4*ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Mac zsh: command not found zsh 所有命令在终端失效
    Java根据FreeMarker模板生成Word(doc)文档(带图片)
    2021年Java面试总结——自我篇
    toArray转换踩坑 java.lang.ClassCastException
    并发和并行
    protoBuf3学习
    StringBuffer和StringBuilder区别
    深拷贝和浅拷贝
    从不订购的客户
    使用jenkins遇到的问题汇总
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3328981.html
Copyright © 2020-2023  润新知