zoukankan      html  css  js  c++  java
  • FLIPTILE POJ NO.3279

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<string>
    using namespace std;
    const int maxn = 16;
    int g[maxn][maxn];
    int flip[maxn][maxn];
    int ans[maxn][maxn];
    int m,n,res = -1;
    int dx[]={-1,1,0,0,0};
    int dy[]={0,0,0,1,-1};
    void print(int mx[16][16])
    {
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                printf("%d%c",mx[i][j],j+1==n?'
    ':' ');
            }
        }
        cout << endl;
    } 
    int get(int x,int y)
    {
        int sum = g[x][y];
        for(int i=0;i<5;i++)
        {
            int newx = x+dx[i];
            int newy = y+dy[i];
            if(newx>=0 && newx<m && newy>=0 && newy<n)
            {
                sum+=flip[newx][newy];
            }
        }
        return sum%2;
    }
    int calc()
    {
        int number = 0;
        for(int i=0;i<n;i++)
            if(flip[0][i]==1) number++; 
        for(int i=1;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(get(i-1,j))
                {
                    number++;
                    flip[i][j]=1;
                }
            }
        }
        for(int i=0;i<n;i++)
            if(get(m-1,i)) return -1;
        return number;     
    }
    void solve()
    {
        for(int i=0;i < 1<<n;i++)
        {
            memset(flip,0,sizeof(flip));
            for(int j=0;j<n;j++)
            {
                flip[0][n-1-j]=i>>j&1;
                int ret = calc();
                //if(ret<res || res == -1)
                //if((res!=-1 && ret<res) || res == -1)
                //if(ret>=0) print(flip);
                if(ret>=0 && (ret<res || res == -1))
                {
                    res = ret;
                    memcpy(ans,flip,sizeof(flip));
                }
            }
        }
        if(res == -1)
        {
            cout<<"IMPOSSIBLE
    ";
        }
        else 
        {
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                {
                    printf("%d%c",ans[i][j],j+1==n?'
    ':' ');
                }
            }
        }
    }
    
    int main(void)
    {
        cin >> m >> n;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            cin >> g[i][j]; 
        }
        solve();
        return 0;
    } 
  • 相关阅读:
    javascript 拷贝详解
    javascript 递归函数详解
    移动端布局解决方案
    Flexbox
    CSS中越界问题的经典解决方案
    移动应用测试方法与思路
    不是人家太装逼,而是我们太low
    GUI自动化测试策略
    GUI测试稳定性的关键技术
    GUI测试还能这么玩(Page Code Gen + Data Gen + Headless)
  • 原文地址:https://www.cnblogs.com/zuimeiyujianni/p/10017060.html
Copyright © 2011-2022 走看看