fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define all(x) x.begin(), x.end()
  5. const int N = 1e6 + 5;
  6. #define ff(s) [s[0] - '0' + 1][s[1] - '0' + 1][s[2] - '0'+ 1][s[3] - '0'+ 1][s[4] - '0'+ 1][s[5] - '0'+ 1]
  7. int n , m;
  8. int pi[11][11][11][11][11][11];
  9. void solve(int tc){
  10. cin >> n;
  11.  
  12. memset(pi,0,sizeof(pi));
  13.  
  14. for(int i = 0; i < n; i++) {
  15. string s; cin >> s;
  16. int x; cin >> x;
  17. pi [s[0] - '0' + 1][s[1] - '0' + 1][s[2] - '0'+ 1][s[3] - '0'+ 1][s[4] - '0'+ 1][s[5] - '0'+ 1] += x;
  18. }
  19.  
  20. for(int i = 1; i <= 10; i++) {
  21. for(int j = 1; j <= 10; j++) {
  22. for(int k = 1; k <= 10; k++){
  23. for(int p = 1; p <= 10 ; p++) {
  24. for(int q = 1; q <= 10; q++) {
  25. for(int r = 1; r <= 10; r++) {
  26. for(int mask = 1; mask < 64; mask++){
  27. int cnt = __builtin_popcount(mask);
  28. vector<int> offset(6);
  29. for(int bit = 0; bit < 6; bit++)
  30. offset[bit] = (mask & (1LL<<bit)) > 0;
  31. if(cnt&1LL)
  32. pi[i][j][k][p][q][r] += pi[i - offset[0] ][j- offset[1]][k - offset[2]][p - offset[3]][q - offset[4]][r - offset[5]];
  33. else
  34. pi[i][j][k][p][q][r] -= pi[i - offset[0] ][j- offset[1]][k - offset[2]][p - offset[3]][q - offset[4]][r - offset[5]];
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. // return;
  43. cin >> m;
  44. while(m--) {
  45. string x, y; cin >> x >> y;
  46. // continue;
  47. vector<int> low(6), high(6), d(6);
  48. for(int i = 0; i < 6; i++)
  49. low[i] = min(x[i]- '0', y[i] - '0'), high[i] = max(x[i]- '0', y[i] - '0');
  50. for(int i = 0; i < 6; i++)
  51. d[i] = high[i] - low[i];
  52. int i = high[0] + 1;
  53. int j = high[1]+ 1;
  54. int k = high[2]+ 1;
  55. int p = high[3]+ 1;
  56. int q = high[4]+ 1;
  57. int r = high[5]+ 1;
  58. int sum = pi[i][j][k][p][q][r];
  59. for(int mask = 1; mask < 64; mask++){
  60. int cnt = __builtin_popcount(mask);
  61. vector<int> offset(6);
  62. for(int bit = 0; bit < 6; bit++)
  63. offset[bit] = ((mask & (1LL<<bit)) > 0) * d[bit];
  64. if(cnt&1LL)
  65. sum += pi[i - offset[0] ][j- offset[1]][k - offset[2]][p - offset[3]][q - offset[4]][r - offset[5]];
  66. else
  67. sum -= pi[i - offset[0] ][j- offset[1]][k - offset[2]][p - offset[3]][q - offset[4]][r - offset[5]];
  68. }
  69. cout << sum << endl;
  70. }
  71. }
  72.  
  73. signed main() {
  74. ios::sync_with_stdio(false);
  75. cin.tie(NULL);
  76. int t = 1;
  77. // cin >> t;
  78. for(int i = 1; i <= t; i++){
  79. solve(i);
  80. }
  81. return 0;
  82. }
Success #stdin #stdout 1.94s 17396KB
stdin
Standard input is empty
stdout
Standard output is empty