Ankit_132

Search for 404

Jun 14th, 2023
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.21 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. #define ll     long long
  7. #define _test   int _TEST; cin>>_TEST; while(_TEST--)
  8. #define ff     first
  9. #define ss     second
  10. #define pb     push_back
  11.  
  12. int main()
  13. {
  14.     ios_base::sync_with_stdio(false);
  15.     cin.tie(NULL);
  16.     cout.tie(NULL);
  17.  
  18.     _test
  19.     {
  20.         int n;
  21.         cin>>n;
  22.  
  23.         string s;
  24.         cin>>s;
  25.  
  26.         int MOD = 1e9 + 7;
  27.  
  28.         int c = count(s.begin(), s.end(), '*');
  29.         ll int pow = 1;
  30.         for(int i=1; i<c; i++)
  31.             (pow *= 2) %= MOD;
  32.  
  33.         ll int cnt4 = 0;
  34.         ll int cnt40 = 0;
  35.  
  36.         ll int ans = 0;
  37.  
  38.         for(auto e: s)
  39.         {
  40.             if(e == '4')
  41.             {
  42.                 (ans += cnt40) %= MOD;
  43.                 cnt4++;
  44.             }
  45.             else if(e == '0')
  46.                 (cnt40 += cnt4) %= MOD;
  47.         }
  48.  
  49.         if(c>=1)
  50.         (ans *= (pow*2)%MOD) %= MOD;
  51.  
  52.         {
  53.             int c4 = count(s.begin(), s.end(), '4');
  54.             int c4s = 0;
  55.  
  56.             for(auto e: s)
  57.             {
  58.                 c4 -= (e == '4');
  59.  
  60.                 if(e == '*')
  61.                 {
  62.                     ll int x = c4 * 1ll * c4s;
  63.                     x %= MOD;
  64.  
  65.                     x *= pow;
  66.                     x %= MOD;
  67.  
  68.                     (ans += x) %= MOD;
  69.                 }
  70.  
  71.                 c4s += (e == '4');
  72.             }
  73.         }
  74.  
  75.         {
  76.             int c4=0;
  77.             int c40 =0;
  78.  
  79.             for(auto e: s)
  80.             {
  81.                 c4 += (e == '4');
  82.  
  83.                 if(e == '0')
  84.                     (c40 += c4) %= MOD;
  85.  
  86.                 if(e == '*')
  87.                 {
  88.                     ll int x = c40;
  89.                     x %= MOD;
  90.  
  91.                     x *= pow;
  92.                     x %= MOD;
  93.  
  94.                     (ans += x) %= MOD;
  95.                 }
  96.             }
  97.         }
  98.  
  99.         {
  100.             reverse(s.begin(), s.end());
  101.             int c4=0;
  102.             int c40 =0 ;
  103.  
  104.             for(auto e: s)
  105.             {
  106.                 c4 += (e == '4');
  107.  
  108.                 if(e == '0')
  109.                     (c40 += c4) %= MOD;
  110.  
  111.                 if(e == '*')
  112.                 {
  113.                     ll int x = c40;
  114.                     x %= MOD;
  115.  
  116.                     x *= pow;
  117.                     x %= MOD;
  118.  
  119.                     (ans += x) %= MOD;
  120.                 }
  121.             }
  122.             reverse(s.begin(), s.end());
  123.         }
  124.  
  125.         pow = 1;
  126.         for(int i=1; i<=c-2; i++)  (pow *= 2) %= MOD;
  127.         if(c == 1)  pow = 0;
  128.        
  129.         {
  130.             int cs = count(s.begin(), s.end(), '*');
  131.             int css = 0;
  132.  
  133.             for(auto e: s)
  134.             {
  135.                 cs -= (e == '*');
  136.  
  137.                 if(e == '0')
  138.                 {
  139.                     ll int x = cs * 1ll * css;
  140.                     x %= MOD;
  141.  
  142.                     x *= pow;
  143.                     x %= MOD;
  144.  
  145.                     (ans += x) %= MOD;
  146.                 }
  147.  
  148.                 css += (e == '*');
  149.             }
  150.         }
  151.  
  152.         {
  153.             int cs = 0 ;
  154.  
  155.             for(auto e: s)
  156.             {
  157.                 cs += (e == '*');
  158.  
  159.                 if(e == '4')
  160.                 {
  161.                     ll int x = ((cs*(cs-1))/2);
  162.                     x %= MOD;
  163.  
  164.                     x *= pow;
  165.                     x %= MOD;
  166.  
  167.                     (ans += x) %= MOD;
  168.                 }
  169.             }
  170.         }
  171.  
  172.         {
  173.             reverse(s.begin(), s.end());
  174.             int cs = 0 ;
  175.  
  176.             for(auto e: s)
  177.             {
  178.                 cs += (e == '*');
  179.  
  180.                 if(e == '4')
  181.                 {
  182.                     ll int x = ((cs*(cs-1))/2);
  183.                     x %= MOD;
  184.  
  185.                     x *= pow;
  186.                     x %= MOD;
  187.  
  188.                     (ans += x) %= MOD;
  189.                 }
  190.             }
  191.             reverse(s.begin(), s.end());
  192.         }
  193.  
  194.         pow = 1;
  195.         for(int i=1; i<=c-3; i++)  (pow *= 2) %= MOD;
  196.         ll int cs = count(s.begin(), s.end(), '*');
  197.         ll int x = cs*(cs-1ll);
  198.         x *= (cs-2ll);
  199.         x /= 6;
  200.         x %= MOD;
  201.         x *= pow;
  202.         x %= MOD;
  203.         (ans += x) %= MOD;
  204.  
  205.         cout<<ans<<"\n";
  206.     }
  207. }
  208.  
Advertisement
Add Comment
Please, Sign In to add comment