SRM148 Div2のhardが普通に解けたので記念に
719.20/1000
概要
数字が9個与えられ、魔法陣が作れる組み合わせはいくつか?
#include <algorithm> #include <iostream> #include <map> #include <numeric> #include <set> #include <sstream> #include <string> #include <vector> using namespace std; #define FOR(i,s,e) for (int i = int(s); i != int(e); i++) #define FORIT(i,c) for (typeof((c).begin()) i = (c).begin(); i != (c).end(); i++) #define ISEQ(c) (c).begin(), (c).end() class MNS { int rn(vector<int> number){ int a[3]; for(int i=0,n=0;i<=7;i+=3){ a[n] = number[i]+number[i+1]+number[i+2]; n++; } if(a[0]==a[1] && a[1]==a[2]) return a[0]; return -1; } int cn(vector<int> number){ int a[3]; for(int i=0,n=0;i<=2;i++){ a[n] = number[i]+number[i+3]+number[i+6]; n++; } if(a[0]==a[1] && a[1]==a[2]) return a[0]; return -1; } public: int combos(vector<int> numbers) { int ans = 0; sort(numbers.begin(),numbers.end()); do{ if(rn(numbers) == cn(numbers) && rn(numbers) != -1) ans++; } while(next_permutation(numbers.begin(),numbers.end())); return ans; } };
next_permutation() 最強です
動的計画法をついに理解しました。 グラフの勉強は全然進んでないですけども。
明日はテストなので今日はテスト勉強に没頭しますw