无中生有之突击NOIP(3)--暴力枚举

神马是枚举呢??
答:也叫穷举,就是把所有的可能全部找到,然后呢,判断就好啊,然后呢,分就来了啊,哈哈哈,是不是很简单感觉,诚然是你想的那样,但仍有很多特殊情况的,比如,有很多的时候,因为时间复杂度我们会受到很大的限制,有一种人叫做荷兰人,有一种数据只为卡死你,so,我们有很多地方需要注意一下,我把自己理解的一些打一下,然后也欢迎大家及时补充。

  1. 设置下标,并及时标注,一个数组就可以囊括大部分的下标变量,并且可以减少多余的判断和循环,我们只需要用0或1来代替或者是bool型的下标变量循环判断就好,
    e.g.for(i=1;i<=9;i++)
    book[i]=0;
    for(i=1;i<=9;i++)
    book[a[i]]=1;
    sum=0;
    for(i=1;i<=9;i++)
    sum+=book[i];
    if(sum==9)//出现了九个不同的数字。并且满足等式条件。

  2. 方向判断,我们利用循环,在已知且固定的方向上移动比如四个方向或者八个方向。经历四到八次的循环来判断,这将可以为我没自己的获得更为简单的思想和思路,如果你认为敲八遍代码很麻烦,那你知道COPY吗??可以考虑发现其他的问题和这个的几点不同,只是做出简单的改变而已,这也就是大神们常说的以空间换取时间。
    e.g.
    题目描述:小时候玩过的炸弹人,通过放炸弹来判断怎样炸死的敌人最多,G为敌人,“.”为空地,“#”为墙。
    实现代码如下:

#include<stdio.h>
#include<algorithm>
int main(){
    char a[20][21];
    int i,j,sum,map=0,p,q,x,y,n,m;
    cin>>n;
    for(i=0;i<=n-1;i++)
        cin>>a[i];
    for(i=0;i<=n-1;i++)
    {
        for(j=0;j<m-1;j++)
        {
            if(a[i][j]=='.')
            {
                sum=0;
                x=i;y=j;
                while(a[x][y]!='#')
                {
                    if(a[x][y]='G')
                        sum++;
                    x--;
                }
                x=i;y=j;
                while(a[x][y]!='#')
                {
                    if(a[x][y]='G')
                        sum++;
                    x++;
                }
                x=i;y=j;
                while(a[x][y]!='#')
                {
                    if(a[x][y]='G')
                        sum++;
                    y--;
                }
                x=i;y=j;
                while(a[x][y]!='#')
                {
                    if(a[x][y]='G')
                        sum++;
                    y++;
                }
                if(sum>map)
                {
                    map=sum;
                    p=i;
                    p=j;
                }
            }
        }
    }
    cout<<p<<","<<q<<" "<<map;
    getchar();getchar();
    return 0;
}
  1. 我们可以碰到很多需要我们判断的地方,但其实有一些量我们可以通过其他的量来判断出来,比如A+B=C我们其实只需要循环A和B,将C通过一个简单的加法来判断,这就使得由原来的ON的三次方变为ON的二次方。就是这般完美。

总结:在NOIP中,我们有很多的机会可以骗分,分数就简简单单的来了,而枚举则是骗分的一种极为简单的方式。

编者自述:求解:一种不含巧克力,不含奶油,不要特别甜的,不要特别苦的,奶多的不要,奶少的不要的东西是什么呢??要好吃的,咖啡或者甜点

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值