您的位置:首页 > 其它

Codeforces Round #140 (Div. 1)D The table 贪心

2015-04-16 22:24 459 查看
#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std ;

const int maxn = 110 ;

int sum_r[maxn] ;

int sum_c[maxn] ;

int vis_c[maxn] ;int vis_r[maxn] ;

int ans_c[maxn] ;int ans_r[maxn] ;

int table[maxn][maxn] ;

void init()

{

memset(sum_r , 0 , sizeof(sum_r)) ;

memset(sum_c , 0 , sizeof(sum_c)) ;

memset(ans_r , 0 , sizeof(ans_r)) ;

memset(ans_c , 0 , sizeof(ans_c)) ;

}

int main()

{

int n , m ;

while(~scanf("%d %d" ,&n , &m))

{

init() ;

int flag = 1;

for(int i = 1;i <= n;i++)

for(int j = 1;j <= m ;j++)

{

scanf("%d" ,&table[i][j]) ;

sum_r[i] += table[i][j] ;

sum_c[j] +=table[i][j] ;

}

while(1)

{

int flag = 0;

for(int i = 1; i <= n;i++)

if(sum_r[i] < 0)

{

ans_r[i] ++ ;

flag = 1;

sum_r[i] = -sum_r[i];

for(int j = 1; j <= m;j++)

sum_c[j] -= 2*table[i][j] , table[i][j] = -table[i][j];

}

for(int j = 1; j <= m;j++)

if(sum_c[j] < 0)

{

ans_c[j]++ ;

flag = 1;

sum_c[j] = -sum_c[j] ;

for(int i = 1;i <= n;i++)

sum_r[i] -= 2*table[i][j] ,table[i][j] = -table[i][j] ;

}

if(!flag) break ;

}

int sumr = 0 ,sumc = 0;

for(int i = 1;i <= max(n, m);i++)

{

ans_c[i]%=2;ans_r[i]%=2;

if(ans_c[i])sumc++;

if(ans_r[i])sumr++;

}

printf("%d",sumr);

for(int i = 1;i <= n;i++)

if(ans_r[i])printf(" %d", i) ;

printf("\n%d",sumc);

for(int j = 1;j <= m;j++)

if(ans_c[j])printf(" %d",j) ;

puts("") ;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: