zoukankan      html  css  js  c++  java
  • Codeforces Round #140 (Div. 1) D. The table 构造

    D. The table

    题目连接:

    http://www.codeforces.com/contest/226/problem/D

    Description

    Harry Potter has a difficult homework. Given a rectangular table, consisting of n × m cells. Each cell of the table contains the integer. Harry knows how to use two spells: the first spell change the sign of the integers in the selected row, the second — in the selected column. Harry's task is to make non-negative the sum of the numbers in each row and each column using these spells.

    Alone, the boy can not cope. Help the young magician!

    Input

    The first line contains two integers n and m (1 ≤ n,  m ≤ 100) — the number of rows and the number of columns.

    Next n lines follow, each contains m integers: j-th integer in the i-th line is ai, j (|ai, j| ≤ 100), the number in the i-th row and j-th column of the table.

    The rows of the table numbered from 1 to n. The columns of the table numbered from 1 to m.

    Output

    In the first line print the number a — the number of required applications of the first spell. Next print a space-separated integers — the row numbers, you want to apply a spell. These row numbers must be distinct!

    In the second line print the number b — the number of required applications of the second spell. Next print b space-separated integers — the column numbers, you want to apply a spell. These column numbers must be distinct!

    If there are several solutions are allowed to print any of them.

    Sample Input

    4 1
    -1
    -1
    -1
    -1

    Sample Output

    4 1 2 3 4
    0

    Hint

    题意

    给你一个n*m的矩阵,矩阵元素的数字绝对值小于等于100,你可以使得一行或者一列的所有数取反

    然后让你构造一个解,使得每一行每一列的和都是非负数

    题解:

    显然,我们可以随便搞一搞(雾

    我们直接看到负的行,直接翻转就好了,看见负的列也直接翻转

    这样最多翻转100^4次,是可以过的。

    为什么呢?

    因为你翻转一次,可以使得整个矩阵的和至少+2

    然后矩阵的和为[-10000,10000],所以最多n*100^4的复杂度

    然后水一水就过了

    来自主代码手的冬令营构造题选讲

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int mp[120][120];
    int sumx[120];
    int sumy[120];
    int ans1[120];
    int ans2[120];
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&mp[i][j]);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                sumx[i]+=mp[i][j];
                sumy[j]+=mp[i][j];
            }
        }
        while(1)
        {
            int flag = 0;
            for(int i=1;i<=n;i++)
            {
                if(sumx[i]<0)
                {
                    for(int j=1;j<=m;j++)
                    {
                        sumy[j]=sumy[j] - 2*(mp[i][j]);
                        mp[i][j]=-mp[i][j];
                    }
                    ans1[i]^=1;
                    sumx[i]=-sumx[i];
                    flag = 1;
                }
            }
            if(flag)continue;
            for(int j=1;j<=m;j++)
            {
                if(sumy[j]<0)
                {
                    for(int i=1;i<=n;i++)
                    {
                        sumx[i]=sumx[i] - 2*(mp[i][j]);
                        mp[i][j]=-mp[i][j];
                    }
                    ans2[j]^=1;
                    sumy[j]=-sumy[j];
                    flag = 1;
                }
            }
            if(flag==0)break;
        }
        int Ans1=0;
        for(int i=1;i<=110;i++)
        {
            if(ans1[i])
            Ans1+=1;
        }
        int Ans2=0;
        for(int i=1;i<=110;i++)
        {
            if(ans2[i])
            Ans2+=1;
        }
        cout<<Ans1<<" ";
        for(int i=1;i<=110;i++)
            if(ans1[i])cout<<i<<" ";
        cout<<endl;
        cout<<Ans2<<" ";
        for(int i=1;i<=110;i++)
            if(ans2[i])cout<<i<<" ";
        cout<<endl;
    }
  • 相关阅读:
    开发笔记--git代码回退,撤回到上一个版本
    开发笔记--Navicat导出postgresql表结构数据成excel文件
    使用Aspose.Words组件给word加水印
    JSON JavaScriptSerializer 字符串的长度超过了为 maxJsonLength 属性设置的值。
    http content-type详解
    Linux CPU使用率超过100%的原因
    Qt查找依赖库的简单方法及如何简便地在pro中添加依赖库
    OSI七层网络模型分别是哪七层?各运行那些协议?
    配置文件管理
    Java中日期转json时日期格式转换
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5159177.html
Copyright © 2011-2022 走看看