sacgajcvs

Untitled

Dec 12th, 2019
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. /*
  2. _____ _ _ _ _
  3. |_ _| |__ ___ / \ _ __ ___| |__ _ _| |
  4. | | | '_ \ / _ \ / _ \ | '_ \/ __| '_ \| | | | |
  5. | | | | | | __// ___ \| | | \__ \ | | | |_| | |
  6. |_| |_| |_|\___/_/ \_\_| |_|___/_| |_|\__,_|_|
  7.  
  8. */
  9. #include<bits/stdc++.h>
  10. #include <ext/pb_ds/assoc_container.hpp>
  11. #include <ext/pb_ds/tree_policy.hpp>
  12. #define ll long long
  13. #define pb push_back
  14. #define ppb pop_back
  15. #define endl '\n'
  16. #define mii map<ll,ll>
  17. #define msi map<string,ll>
  18. #define mis map<ll, string>
  19. #define rep(i,a,b) for(ll i=a;i<b;i++)
  20. #define repr(i,a,b) for(ll i=b-1;i>=a;i--)
  21. #define trav(a, x) for(auto& a : x)
  22. #define pii pair<ll,ll>
  23. #define vi vector<ll>
  24. #define vii vector<pair<ll, ll>>
  25. #define vs vector<string>
  26. #define all(a) (a).begin(),(a).end()
  27. #define F first
  28. #define S second
  29. #define sz(x) (ll)x.size()
  30. #define hell 1000000007
  31. #define lbnd lower_bound
  32. #define ubnd upper_bound
  33.  
  34. /* For Debugging */
  35. #define DEBUG cerr<<"/n>>>I'm Here<<</n"<<endl;
  36. #define display(x) trav(a,x) cout<<a<<" ";cout<<endl;
  37. #define what_is(x) cerr << #x << " is " << x << endl;
  38.  
  39. std::mt19937_64 rng(std::chrono::steady_clock::now().time_since_epoch().count());
  40. #define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update>
  41. #define TIME cerr << "\nTime elapsed: " << setprecision(5) <<1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
  42. #define DECIMAL(n) cout << fixed ; cout << setprecision(n);
  43. #define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
  44. using namespace __gnu_pbds;
  45. using namespace std;
  46. #define PI 3.141592653589793
  47. #define N 100005
  48. #define M 128
  49. #define T 7
  50. map<ll,ll> tst;
  51. vi ps;
  52. ll dp[N][M][T];
  53. // ll v[N][T];
  54. ll n,pw[T];
  55. void clean()
  56. {
  57. ps.clear();
  58. }
  59.  
  60. ll fun(ll i,ll mask,ll p)
  61. {
  62. // cout<<i<<" "<<mask<<endl;
  63. if(i>=n)
  64. {
  65. return 0;
  66. }
  67. if(dp[i][mask][p]!=-1)
  68. return dp[i][mask][p];
  69. if(mask&ps[i])
  70. {
  71. dp[i][mask][p]=fun(i+1,mask,p)+(p!=ps[i]);
  72. // cout<<i<<" "<<mask<<" "<<p<<" "<<dp[i][mask][p]<<endl;
  73. return dp[i][mask][p];
  74. }
  75. dp[i][mask][p]=fun(i+1,mask+pw[ps[i]],ps[i]);
  76. // cout<<i<<" "<<mask<<" "<<p<<" "<<dp[i][mask][p]<<endl;
  77. return dp[i][mask][p];
  78. }
  79.  
  80.  
  81. void solve()
  82. {
  83. ll x;
  84. cin>>n;
  85. rep(i,0,n)
  86. {
  87. cin>>x;
  88. if(sz(ps)==0 || tst[x]!=ps.back())
  89. {
  90. ps.pb(tst[x]);
  91. }
  92. }
  93. n=sz(ps);
  94. // rep(i,0,n)
  95. // {
  96. // v[i][ps[i]]=1;
  97. // }
  98. // rep(j,0,T)
  99. // {
  100. // repr(i,0,n-1)
  101. // v[i][j]+=v[i+1][j];
  102. // }
  103. rep(i,0,n+1)
  104. {
  105. rep(j,0,M)
  106. {
  107. rep(k,0,T)
  108. dp[i][j][k]=-1;
  109. }
  110. }
  111. ll mn=LLONG_MAX;
  112. rep(i,0,T)
  113. mn=min(mn,fun(0,pw[i],i));
  114. cout<<mn<<endl;
  115. clean();
  116. return;
  117. }
  118. int main()
  119. {
  120. FAST
  121. int TESTS=1;
  122. pw[0]=1;
  123. rep(i,1,T)
  124. pw[i]=2*pw[i-1];
  125. tst[10]=0;
  126. tst[20]=1;
  127. tst[50]=2;
  128. tst[100]=3;
  129. tst[200]=4;
  130. tst[500]=5;
  131. tst[2000]=6;
  132. cin>>TESTS;
  133. while(TESTS--)
  134. {
  135. solve();
  136. }
  137. TIME
  138. return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment