Skip to content

Commit 864de4d

Browse files
committed
srm 148 div 2 1000
1 parent 741d0e9 commit 864de4d

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed

MNS.cpp

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include <iostream>
2+
#include <sstream>
3+
#include <vector>
4+
#include <algorithm>
5+
#include <set>
6+
#include <map>
7+
#include <numeric>
8+
using namespace std;
9+
10+
class MNS
11+
{
12+
public:
13+
long fun(vector<int> v){
14+
long sum = 0;
15+
for(int i = 0; i < v.size(); i++) sum = 10*sum + v[i];
16+
return sum;
17+
}
18+
int combos(vector <int> numbers)
19+
{
20+
set<long> S;
21+
int sum = accumulate(numbers.begin(), numbers.end(), 0);
22+
sort(numbers.begin(), numbers.end());
23+
do{
24+
int k = sum/3;
25+
int a1 = numbers[0], b1 = numbers[1], c1 = numbers[2];
26+
int a2 = numbers[3], b2 = numbers[4], c2 = numbers[5];
27+
int a3 = numbers[6], b3 = numbers[7], c3 = numbers[8];
28+
if(a1 + a2 + a3 == k && b1 + b2 + b3 == k && c1 + c2 + c3 == k && a1 + b1 + c1 == k && a2 + b2 + c2 == k && a3 + b3 + c3 == k) S.insert(fun(numbers));
29+
}
30+
while(next_permutation(numbers.begin(), numbers.end()));
31+
return S.size();
32+
}
33+
34+
// BEGIN CUT HERE
35+
public:
36+
void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); }
37+
private:
38+
template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '\"' << *iter << "\","; os << " }"; return os.str(); }
39+
void verify_case(int Case, const int &Expected, const int &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }
40+
void test_case_0() { int Arr0[] = {1,2,3,3,2,1,2,2,2}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 18; verify_case(0, Arg1, combos(Arg0)); }
41+
void test_case_1() { int Arr0[] = {4,4,4,4,4,4,4,4,4}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 1; verify_case(1, Arg1, combos(Arg0)); }
42+
void test_case_2() { int Arr0[] = {1,5,1,2,5,6,2,3,2}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 36; verify_case(2, Arg1, combos(Arg0)); }
43+
void test_case_3() { int Arr0[] = {1,2,6,6,6,4,2,6,4}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 0; verify_case(3, Arg1, combos(Arg0)); }
44+
45+
// END CUT HERE
46+
47+
};
48+
49+
// BEGIN CUT HERE
50+
int main()
51+
{
52+
MNS ___test;
53+
___test.run_test(-1);
54+
}
55+
// END CUT HERE

MNS.txt

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
PROBLEM STATEMENT
2+
3+
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:
4+
5+
6+
1 2 3
7+
3 2 1
8+
2 2 2
9+
10+
11+
Create a class MNS containing a method combos which takes as an argument a vector <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.
12+
13+
14+
DEFINITION
15+
Class:MNS
16+
Method:combos
17+
Parameters:vector <int>
18+
Returns:int
19+
Method signature:int combos(vector <int> numbers)
20+
21+
22+
NOTES
23+
-Unlike some versions of the magic number square, the numbers do not have to be unique.
24+
25+
26+
CONSTRAINTS
27+
-numbers will contain exactly 9 elements.
28+
-each element of numbers will be between 0 and 9, inclusive.
29+
30+
31+
EXAMPLES
32+
33+
0)
34+
{1,2,3,3,2,1,2,2,2}
35+
36+
Returns: 18
37+
38+
1)
39+
{4,4,4,4,4,4,4,4,4}
40+
41+
Returns: 1
42+
43+
2)
44+
{1,5,1,2,5,6,2,3,2}
45+
46+
Returns: 36
47+
48+
3)
49+
{1,2,6,6,6,4,2,6,4}
50+
51+
Returns: 0

0 commit comments

Comments
 (0)