Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 21st, 2010 | Syntax: None | Size: 2.04 KB | Hits: 102 | Expires: Never
Copy text to clipboard
  1. #include<iostream>
  2. #include<vector>
  3. #include<map>
  4. #include<sstream>
  5. #include<math.h>
  6. #include<set>
  7. #include<fstream>
  8. #include<algorithm>
  9. #include<cstring>
  10. #include<cassert>
  11. #include <list>
  12. #include <set>
  13. #include <deque>
  14. #include <stack>
  15. #include <bitset>
  16. #include <functional>
  17. #include <numeric>
  18. #include <utility>
  19. #include <iomanip>
  20. #include <cstdio>
  21. #include <cstdlib>
  22. #include <ctime>
  23. #include <queue>
  24.  
  25. using namespace std;
  26.  
  27. #define debug(x) cout << #x << " = " << x << "\n";
  28. #define all(v) (v).begin(), (v).end()
  29. #define rall(v) (v).rbegin(), (v).rend()
  30. #define sz size()
  31. #define pb push_back
  32. #define mp make_pair
  33. #define fr(i, n) for(i=0;i<n;i++)
  34. #define fr2(i, a, n) for(i=a;i<n;i++)
  35. #define mem(a, n) memset(a, n, sizeof(a))
  36. typedef vector<int> VI;
  37. typedef long long LL;
  38. typedef vector<string> VS;
  39. typedef stringstream SS;
  40. vector<int> v[15];
  41. int l;
  42. char vis[15];
  43.                 char a[1000000];
  44. LL dp[15][15];
  45. int gcd(int a, int b) {
  46.         cout << a << " " << b << endl;
  47.         if(b==0)
  48.                 return a;
  49.         return (b, a%b);
  50. }
  51. const int mod = 1000000007;
  52. LL solve(int sx, int sy, int r) {
  53.         if(r==l-1)
  54.                 return 1;
  55. //      cout << sx << " " << sy << " " << r << endl;
  56.         LL &d = dp[sx][sy];
  57.         if(d!=-1)
  58.                 return d;
  59.         d = 0;
  60.         int i, j;
  61.         for(i=0;i<l;i++) {
  62.                 if(vis[i])
  63.                         continue;
  64.                 for(j=0;j<v[i].sz;i++) {
  65.                         if(std::__gcd(v[i][j], v[sx][sy])==1)
  66. {
  67.                                 vis[i] = 1;
  68.                                 d += solve(i, j, r+1);
  69.                                 vis[i] = 0;                    
  70.                         }
  71.                                
  72.                 }
  73.         }
  74.         return d;
  75.                
  76. }
  77.  
  78. int main() {
  79.         int t;
  80.         cin >> t;
  81.         string s;
  82.         int i = 0;
  83.         while(t--) {
  84.                 scanf("%d", &l);
  85.                 getline(cin, s);
  86.                 int k;
  87.                 fr(k, l) {
  88.                 gets(a);
  89.                 s = a;
  90.                 SS ss;
  91.                 ss << s;
  92.                 set<int> se;
  93.                 int n;
  94.                
  95.                 while(ss >> n) {
  96.                         se.insert(n);
  97.                 }
  98.                 set<int> :: iterator it;
  99.                 for(it=se.begin();it!=se.end();it++)
  100.                         v[i].pb(*it);
  101.                 i++;           
  102.                                
  103.                 }
  104.                 mem(dp, -1);
  105.                 LL ans = 0;
  106.                 int j;
  107.                
  108.                 for(i=0;i<l;i++) {
  109.                         mem(vis, 0);
  110.                         for(j=0;j<v[i].sz;j++) {
  111.                                 vis[i] = 1;
  112.                                 ans = (ans + solve(i, j, 0)) % mod;
  113.                                 vis[i] = 0;
  114.                         }
  115.                 }
  116.                 cout << ans << endl;
  117.                
  118.         }
  119.        
  120.        
  121. }