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!\n");
        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("\n");
    }
    if (a[n][m]) {
        printf("gun!\n");
    } else printf("yue!\n");
}

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],结果是一样的。

 

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

posted on 2016-11-18 15:23  stupid_one  阅读(215)  评论(0编辑  收藏  举报

导航