• 剪邮票


    题目: 
    如【图1.jpg】, 有12张连在一起的12生肖的邮票。 
    现在你要从中剪下5张来,要求必须是连着的。 (仅仅连接一个角不算相连) 
    比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

    这里写图片描述

    这里写图片描述

    这里写图片描述

    答案是:116

    思路:这题说实话刚开始懵了,DFS吧 感觉并不是,因为深搜的话 选一个就往回走了,感觉不是。  然后再想别的办法 ,果然蓝桥杯的题目暴力很强大,暴力出奇迹真没错。。  我就是暴力过的。。。

    但是如果真的是比赛现场,哪里来的那么久的时间做呢?  做了一个多小时吧  主要是找BUg   找了很久。  总结一下,蓝桥杯一定要自己验证一下自己代码是否正确,就算验证不了,也把结果输出来看看

    至少输出来的结果保证都是对的   !!!  切记!!  这也花不了多少时间  但是却能很大程度提高正确率  个人认为很不错!!!

    好了 不讲废话了   思路是  : 题目就1-12个数字  你选择五个数字出来暴力,所有情况也不多计算机一秒内跑出来足够了 。  你先选出5个数字 判断这五个数字是否符合条件   判断条件也是暴力

    只要人一个数字和其它数字相差1或者4就是相邻了,但是有特例(4 5  和8 9)特判一下就够了   注意还用了一下并查集,联通的归为一块  最后看是否是一块就好了 

    看代码:

    #include<iostream>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int a[5];
    int node[13];
    int ans=0;
    void Init()
    {
        for(int i=0;i<13;i++) node[i]=i;
    }
    int Find(int x)
    {
        if(x==node[x]) return x;
        return node[x]=Find(node[x]);
    }
    void Union(int x,int y)
    {
        x=Find(x);
        y=Find(y);
        if(x!=y) node[x]=y;
        return ;
    }
    void judge()
    {
        int flag=0;
        Init();
        for(int i=0;i<5;i++)
        {
            flag=0;
            for(int j=0;j<5;j++)
            {
                int z=abs(a[i]-a[j]);
                if((z==1||z==4)&&(!(a[i]==4&&a[j]==5))&&(!(a[i]==8&&a[j]==9))&&(!(a[i]==5&&a[j]==4))&&(!(a[i]==9&&a[j]==8)))
                {
                    //&&(!(a[i]==5&&a[j]==4))&&(!(a[i]==9&&a[j]==8))
                    //cout<<"**"<<endl;
                    Union(a[i],a[j]);
                    flag=1;
                    //break;
                }
            }
            if(flag==0) return ;
        }
        //for(int i=0;i<5;i++) cout<<a[i];
        //cout<<endl;
        int cnt=Find(a[0]);
        for(int i=0;i<5;i++)
        {
            if(Find(a[i])!=cnt) return ;
        }
    //    for(int i=0;i<5;i++) cout<<a[i];
    //    cout<<endl;
        ans++;
        return ;
    }
    int main()
    {
    
        for(int i=1;i<=12;i++)
        {
            a[0]=i;
            for(int j=i+1;j<=12;j++)
            {
                a[1]=j;
                for(int k=j+1;k<=12;k++)
                {
                    a[2]=k;
                    for(int l=k+1;l<=12;l++)
                    {
                        a[3]=l;
                        for(int r=l+1;r<=12;r++)
                        {
                            a[4]=r;
                            judge();
                        }
                    }
                }
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    你的行为合理吗?看看社会心理学给我们的启示。
    如何在Firefox方便的抓取网页上的Flash
    Disable anchor tag的javascript代码(兼容IE和Firefox)
    如何更改DotNetNuke(DNN)的默认语言
    The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
    一寸、两寸证件照photoshop批处理动作
    DotNetNuke(DNN)皮肤制作如何居中内容
    忘记DotNetNuke的host密码?如何恢复丢失的DNN密码
    使用DIIOP必须作的DOMINO手动设置
    Domino中Servlet实现RSS中文乱码问题解决
  • 原文地址:https://www.cnblogs.com/caijiaming/p/10351022.html
Copyright © 2020-2023  润新知