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;
    }
  • 相关阅读:
    n8n 基于node 的流程自动化工具
    kubectl-trace 基于bpftrace 的kubernetes 集群性能分析工具
    bcc 基于bpf 分析linux 系统性能的强大工具包
    使用arthas 生成火焰图分析jvm
    openjdk11 stretch基础镜像无法找到对应openjdk dbg 包的问题
    async-profiler 容器使用常见问题
    使用jattach 在host 节点查看容器jvm信息
    使用async-profiler简单分析zeebe 工作流引擎的性能
    minio select api 试用
    使用zeebe DebugHttpExporter 查看zeebe 工作流信息
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5159177.html
Copyright © 2011-2022 走看看