zoukankan      html  css  js  c++  java
  • hihocoder-1196 : 高斯消元·二

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    在上一回中,小Hi和小Ho趁着便利店打折,买了一大堆零食。当他们结账后,看到便利店门口还有其他的活动。

    店主:买了东西还可以参加游戏活动哦,如果能够完成游戏还有额外的奖品。

    小Hi和小Ho赶紧凑了过去。

    店主放了一块游戏板在店门口,有5行6列格子。左上角为坐标(1,1)。一部分格子是亮着的,另一部分是暗着的。

     当按下某一个格子时,它和上下左右4个格子的状态就会改变。原来亮着的格子变成暗的,原来暗的格子会变亮。比如下图中按下标记有红叉的格子后,绿色虚线区域内的格子状态都会改变:

    店主给出初始的状态,参加游戏的人员需要通过按下某些格子,让游戏板上所有的灯都亮起来就可以赢得奖品。

    小Ho:这不就是开关灯问题么,看我来解决它!

    本题改编自ACMICPC Greater New York 2002 EXTENDED LIGHTS OUT

       

    提示:异或方程组

     

    输入

    第1..5行:1个长度为6的字符串,表示该行的格子状态,1表示该格子是亮着的,0表示该格子是暗的。

    保证一定存在解,且一定存在暗着的格子。

    输出

    需要按下的格子数量k,表示按下这k个位置后就可以将整个游戏板所有的格子都点亮。

    接下来k行,每行一个坐标(x,y),表示需要按下格子(x,y)。x坐标较小的先输出,若x相同,则先输出y坐标较小的。

    样例输入
    001111
    011111
    111111
    111110 
    111100
    样例输出
    2
    1 1
    5 6
     
    /**
        题意:给一个矩阵,全部转化成1
        做法:高斯消元 矩阵的建立 要求输出按得按钮的坐标
    **/
    #include <iostream>
    #include <string.h>
    #include <cmath>
    #include <algorithm>
    #include <stdio.h>
    #define maxn 40
    using namespace std;
    int mmap[maxn][maxn];
    int x[maxn];
    int Guess(int equ, int val)
    {
        int k;
        int j;
        int t;
        for(int i = 0; i < equ; i++)
        {
            for(k = i; k < val; k++)    ///该列不为0的数的位置
            {
                if(mmap[k][i]) {
                    break;
                }
            }
            if(k != i)
            {
                for(j = 0; j <= val; j++) {
                    swap(mmap[i][j], mmap[k][j]);
                }
            }
            for(k = 0; k < equ; k++)
            {
                if(k != i && mmap[k][i])
                {
                    for(j = 0; j <= val; j++)
                    {
                        mmap[k][j] ^= mmap[i][j];
                    }
                }
            }
        }
    }
    void init() /// 相关联的位置
    {
        memset(mmap, 0, sizeof(mmap));
        memset(x, 0, sizeof(x));
        for(int i = 0; i < 5; i++)
        {
            for(int j = 0; j < 6; j++)
            {
                int tt = (i * 6) + j;
                mmap[tt][tt] = 1;
                if(i > 0) {
                    mmap[(i - 1) * 6 + j][tt] = 1;
                }
                if(i < 4) {
                    mmap[(i + 1) * 6 + j][tt] = 1;
                }
                if(j > 0) {
                    mmap[i * 6 + j - 1][tt] = 1;
                }
                if(j < 5) {
                    mmap[i * 6 + j + 1][tt] = 1;
                }
            }
        }
    }
    char ch[10];
    int main()
    {
        init();
        int res = 0;
        for(int i = 0; i < 5; i++)
        {
            scanf("%s", ch);
            for(int j = 0; j < 6; j++)
            {
                int tt = ch[j] == '0' ? 1 : 0;
                mmap[res++][30] = tt;
            }
        }
        Guess(30, 30);
        int temp = 0;
        for(int i = 0; i < 30; i++)
        {
            if(mmap[i][30]) {
                temp++;
            }
        }
        printf("%d
    ", temp);
        for(int i = 0; i < 30; i++)
        {
            if(mmap[i][30]) {
                printf("%d %d
    ", (i / 6) + 1, (i % 6) + 1);
            }
        }
        return 0;
    }
    View Code
     
  • 相关阅读:
    免费的视频、音频转文本
    Errors are values
    Codebase Refactoring (with help from Go)
    Golang中的坑二
    Cleaner, more elegant, and wrong(msdn blog)
    Cleaner, more elegant, and wrong(翻译)
    Cleaner, more elegant, and harder to recognize(翻译)
    vue控制父子组件渲染顺序
    computed 和 watch 组合使用,监听数据全局数据状态
    webstorm破解方法
  • 原文地址:https://www.cnblogs.com/chenyang920/p/4779244.html
Copyright © 2011-2022 走看看