Thursday, February 10, 2011

TopCoder SRM 148, DIV II, MNS

Problem Statement

9 numbers need to be arranged in a magic number square. A magic number square is a square of numbers that is arranged such that every row and column has the same sum. For example:

1 2 3
3 2 1
2 2 2
Create a class MNS containing a method combos which takes as an argument a int[] numbers and returns the number of distinct ways those numbers can be arranged in a magic number square. Two magic number squares are distinct if they differ in value at one or more positions. For example, there is only one magic number square that can be made of 9 instances of the same number.


int func(vector <int> num){
  int mgnum=num[0]+num[1]+num[2];
  int k=3;
  rep(i,0,2){
    int temp=0;
    rep(j,0,3){
      temp+=num[k+j];
    }
    if (mgnum!=temp)return 0;
    k+=3;
  }
  k=0;
  rep(i,0,2){
    int temp=0;
    rep(j,0,3){
      temp+=num[k+3*j];
    }
    if(mgnum!=temp)return 0;
    k+=1;
  }
  return 1;
}

class MNS {

public:

int combos(vector <int> numbers) {
 sort(all(numbers));
 int ans=0;
 ans+=func(numbers);
 while(next_permutation(all(numbers))){
   ans+=func(numbers);
 }
 return ans;
}

};

No comments:

Post a Comment