bnu_4060 Plants vs. Zombies

原题链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=4060

分析:

        解法一:注意到这里只有一个数据的单起来的,其他都两两配对,有进有出(被杀死)。那么我们用sum表示他们的和,进则加,出则减。最后剩下的sum就是单着的那个数。

        解法二:对于这种两两配对,就一个数单着的题,可以用‘^’(异或)运算去掉相同的,留下不同的。

              异或运算:  0^a=a;   a^a^b=b;  a^a=0;

                a^c^b^a^b=c;(相同的^后都变成0了,最后只剩下单个的和0异或);

我的代码(解一):

#include<stdio.h>
typedef long long LL;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        LL sum=0;
        for(int i=1;i<=2*n-1;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            if(!a) sum+=b;
            else   sum-=b;
        }
        printf("%lld\n",sum);
    }
    return 0;
}

我的代码(解二):

#include<stdio.h>
typedef long long LL;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        int ans=0;
        for(int i=1;i<=2*n-1;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            ans^=b;
        }
        printf("%d\n",ans);
    }
    return 0;
}

总结:

        一开始用二分,果断超时。接着用STL中的map容器,果断超内存。看别人的代码后,我和我的小心肝都惊呆了。。原来可以这样。(想了下,以前其实在HDOJ上做过这类题的 o(>﹏<)o).

        杭电的原题戳这里


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《2048》一款益智小游戏,游戏的规则十分简单,是时下一款简单易上手的数字小游戏,但又十分虐心。下面是游戏鸟小编就为大家整理的一些关于2048游戏高分攻略技巧。 游戏规则: 游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字方块撞在一起之后合并成为他们的和,每次操作之后会随机生成一个2或者4,最终得到一个“2048”的方块就算胜利了。 技巧解析: 1、简单点来说就是尽量不要向上滑动就可以了。先得到较大的数放在右下角。例如第四行2-2-4-32。两次想右滑动得到8-32。然后在上面肯定得到了2或4,向左滑动,放到左边,然后向下滑动,麻烦点的例如得到4-2-8-32。此时需要考虑的就是在第三行第二个位置得到1个2,然后向下合并再向右合并就可以得到16-32了。同理,这样循环,小数不断积累得到更大的数。步骤越来越多而已。 2、数越来越大以后,较大的数要依次靠着这个,如图64-128-256-512。(如果是256-64-256-512就难度很大了)按向右递增的规律,这样如果在上面一行产生出一个64在64的上面,即可按下将64合为128,不断按右产生新的最大的数1024。然后同理,再产生512紧贴1024,256紧贴512。 3、因为尽量不向上滑动,所以大的数必然在底下,靠大家自己的头脑稍微判断下,基本不会出太大的问题就可以达到这样效果。因为还想靠在右下角,所有还要谨慎向左滑动,要产生所需要的数,最好先将最后一行填满,譬如2-2-256-512也可以,这样第三行左右下就可以随意的滑动了, 产生所需要的数按下合并即可。 总结: 总的来说游戏玩法游规则很简单,就是把方块合并,合并的办法是其中一个数字靠边的时候,将另一个数字向四个方向的墙推过去。2和2可以合并成4,4和4合并成8,直至合成到2048,虽然看似简单,但是根本停不下啊。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值