Pagini recente » Cod sursa (job #441200) | Cod sursa (job #207155) | Cod sursa (job #3327677) | Cod sursa (job #2730747) | Cod sursa (job #3302707)
struct InputData {
a: Vec<Vec<i32>>,
n:usize,
m:usize
}
fn read_input_data() -> InputData {
let file_content = std::fs::read_to_string("flip.in").unwrap();
let file_lines = file_content.split_whitespace().collect::<Vec<&str>>();
let n = file_lines[0].parse::<usize>().unwrap();
let m = file_lines[1].parse::<usize>().unwrap();
let mut a: Vec<Vec<i32>> = vec![vec![0; m]; n];
{
let mut number = 2;
for i in 0..n {
for j in 0..m {
a[i][j] = file_lines[number].parse::<i32>().unwrap();
number += 1;
}
}
}
let input_data:InputData = InputData { a, n, m, };
input_data
}
// fn get_sum_line(input_data: &InputData, a: &Vec<Vec<i32>> ,line:usize) -> i32{
// let mut sum = 0;
// for j in 0..input_data.m {
// sum += a[line][j];
// }
// return sum;
// }
fn get_sum_col(input_data: &InputData, a: &Vec<Vec<i32>>, col:usize) -> i32{
let mut sum = 0;
for i in 0..input_data.n {
sum += a[i][col];
}
return sum;
}
fn invert_line(input_data: &InputData, a: &mut Vec<Vec<i32>>, line:usize) {
for j in 0..input_data.m {
a[line][j] *= -1;
}
}
fn invert_col(input_data: &InputData, a: &mut Vec<Vec<i32>>, col:usize) {
for i in 0..input_data.n {
a[i][col] *= -1;
}
}
fn improve_on_col(input_data: &InputData, a: &mut Vec<Vec<i32>>) {
for j in 0..input_data.m {
if get_sum_col(input_data, a, j) < 0 {
invert_col(input_data, a, j);
//println!("invert colum = {}", j);
}
}
}
fn solve(input_data: &InputData) -> i32{
let pow_16:i32 = 1 << input_data.n;
let mut rez = 0;
for i in 0..pow_16 {
let mut vec = input_data.a.clone();
//println!("i = {}", i);
for j in 0..input_data.n {
if i & (1 << j) == 1 << j {
invert_line(&input_data, &mut vec, j);
//println!("invert line = {}", j);
}
}
//println!("vec = {:?}", vec);
improve_on_col(&input_data, &mut vec);
//println!("vec = {:?}", vec);
let mut val = 0;
for j in 0..input_data.m {
val += get_sum_col(&input_data, &vec, j);
}
if rez < val {
rez = val;
}
}
rez
}
fn main() {
let input_data: InputData = read_input_data();
//println!("{:#?} \n {} {}", input_data.a, input_data.n, input_data.m);
let sol = solve(&input_data);
std::fs::write("flip.out", format!("{}", sol)).unwrap();
}