zoukankan      html  css  js  c++  java
  • 17972 Golden gun的巧克力

    17972 Golden gun的巧克力

    时间限制:1000MS  内存限制:65535K
    提交次数:93 通过次数:13 收入:124

    题型: 编程题   语言: G++;GCC;JAVA

     

    Description

        众所周知,13级有尊大神Golden gun,人称根叔,简称金枪!众立志进校队的师弟如果不认识这个成功人士,我只能说太失败了!
    他出手阔绰,首战夺金!由于工作关系,Golden gun坐享艺术学院所有资源,他可以自豪地说:“我要让全世界都知道!华农的艺术学
    院的MM市场都让我承包了!”,据某可靠消息来源称,Golden gun的短号非常抢手,在艺术学院可谓是无人不晓。经常会有艺术学院的
    MM拨打这个热线希望Golden gun大神能给MM一丢丢的时间
        经常在智商上狠狠鄙视我这个弱菜师妹的成功人士Golden gun当然不会追求肤浅的外在美,而是内在美!现在请允许我用七字真言
    来阐释内在美的真谛,那就是,脸好还要智商高!用一个四字词语概括:脑残退散。被艺术学院的MM们电话骚扰后,Golden gun为了认
    真切题决定出手虐MM!
       Golden gun让弱菜师妹出了一个题:我们定义,在一个N*M的盒子A中,每个格子的巧克力数量为Aij。MM可以在其中选择在一个格子
    上加任意t个巧克力,如果有相邻(即两个格子拥有一条公共边)的情况,则必然要选择其中一个相邻的格子上加相同t个巧克力。
    (注意:Aij和t都可以为负也可以为正)如果MM在任意次操作后可以把盒子上每个格子上的巧克力数量都变成0,即称为高智商白富美,
    GG就会由衷的欣赏这个MM,然后…你们懂的。
       那么问题来了,MM不知道自己能不能约到Golden gun,就来求助万能的师弟师妹希望预见结局,如果整盒巧克力不能成功归为零,那
    么只能遗憾地输出“gun!”,如果可以的话,那就可以很高兴地输出“yue!”了。
    
    出题人:locked_M
    




    输入格式

    测试数据有多组。
    每组数据第一行两个整数N,M(1<=N,M<=5).
    第二行到第N+1行,每行有M个数,每个数的取值范围是[-5000,5000].
    输入以0 0结束
    



    输出格式

    如果不能成功归零,输出“gun!”,否则输出“yue!”



     

    输入样例

    2 2
    0 0
    1 1
    
    2 2
    1 1 
    1 0
    
    0 0



     

    输出样例

    yue!
    gun!
    



     

    作者

     201330340218

    一题坑爹题,

    明显如果能全部变成0的话,什么样的顺序是没关系的。可以直接模拟。

    关键就是如果n == 1 && n == m的时候。

    直接yue,因为没有相邻的格子。。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define IOS ios::sync_with_stdio(false)
    using namespace std;
    #define inf (0x3f3f3f3f)
    typedef long long int LL;
    
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    #include <string>
    int a[33][33];
    int n, m;
    void work() {
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                scanf("%d", &a[i][j]);
            }
        }
        if (n == 1 && n == m) {
            printf("yue!
    ");
            return;
        }
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                if (j + 1 <= m) {
                    a[i][j + 1] += 0 - a[i][j];
                    a[i][j] = 0;
                } else if (i + 1 <= n) {
                    a[i + 1][j] += 0 - a[i][j];
                    a[i][j] = 0;
                }
            }
        }
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                if (i == n && j == m) continue;
                if (a[i][j]) while(1);
    //            printf("%d ", a[i][j]);
            }
    //        printf("
    ");
        }
        if (a[n][m]) {
            printf("gun!
    ");
        } else printf("yue!
    ");
    }
    
    int main() {
    #ifdef local
        freopen("data.txt","r",stdin);
    #endif
        while (scanf("%d%d", &n, &m) != EOF && n + m) {
            work();
        }
        return 0;
    }
    View Code

    关于为什么顺序没关系,我解释下

    假如从(1, 1)走到(3, 4),我们要经过的总步数是5步。假如那个数字是1,那么走到(3, 4)的时候的数字肯定是-1.不管你兜多少个圈,因为这是奇偶性的问题,哈密顿距离是奇数,那么去到这个点的步数也只能是奇数。

    因为要偶数步兜一个圈。所以把她们都集中在a[n][m],结果是一样的。

    标程的做法就是统计奇数步和偶数步的总数值

  • 相关阅读:
    Python—函数基础篇
    C语言 文件操作(四)
    C语言 文件操作(三)
    C语言 文件操作(二)
    C语言 文件操作(一)
    C语言 生日快乐
    Matlab入门(二)
    Matlab入门(一)
    精华篇:数组指针
    汇编刷题:求一到100内的偶数之和(本程序将和按十六进制输出)
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/6077893.html
Copyright © 2011-2022 走看看