Hatena::Grouptopcoder

TopCoderの問題を解く

解いた問題の一覧表

2009-05-04

MNS

| 06:13

問題文

541.75->986.47 / 1000

全ケースを試す方法で解けた。

class MNS {
public:
    int combos(vector <int> numbers) {
        sort(numbers.begin(), numbers.end());
        int counter = 0;
        do {
            const static int d[6][3] = {
                { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 },
                { 0, 3, 6 }, { 1, 4, 7 }, { 2, 5, 8 } };
            const int sum = numbers[0] + numbers[1] + numbers[2];
            for (int i = 1; i < 6; i++) {
                if (sum != (numbers[d[i][0]]+numbers[d[i][1]]+numbers[d[i][2]])) {
                    break;
                } else if (i == 5) {
                    counter++;
                    break;
                }
            }
        } while (next_permutation(numbers.begin(), numbers.end()));
        return counter;
    }
};