Advertisement
Dorijanko

E

Oct 11th, 2023
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define x first
  3. #define y second
  4. using namespace std;
  5. using ll=long long;
  6. using ld=long double;
  7. using pii=pair<int,int>;
  8. using vi=vector<int>;
  9. using vl=vector<ll>;
  10. #define pb push_back
  11. #define all(a) begin(a),end(a)
  12.  
  13. const int N=300010,MOD=1e9+7;
  14. const char en='\n';
  15. const ll LLINF=1ll<<60;
  16.  
  17. int n,mad;
  18.  
  19. int ko(string a,string b)
  20. {
  21. int cn=0;
  22. for (int i=0;i<8;++i) if (a[i]==b[i]) ++cn;
  23. return cn;
  24. }
  25.  
  26. map<vector<string>,string> koj;
  27.  
  28. void nap(vector<string> v,int d)
  29. {
  30. if (v.size()<=1)
  31. {
  32. mad=max(mad,d+(int)v.size());
  33. return;
  34. }
  35. random_shuffle(v.begin(),v.end());
  36. ld maxsl=-1;
  37. string kak="??";
  38. for (auto x: v)
  39. {
  40. vi u(9);
  41. for (auto y: v) ++u[ko(x,y)];
  42. ld s=0;
  43. for (auto y: u) s+=log(y+1);
  44. if (s>maxsl)
  45. {
  46. maxsl=s;
  47. kak=x;
  48. }
  49. }
  50. vector<vector<string>> u(9);
  51. for (auto y: v) u[ko(kak,y)].pb(y);
  52. for (int i=0;i<8;++i) nap(u[i],d+1);
  53. koj[v]=kak;
  54. }
  55.  
  56. int main()
  57. {
  58. ios_base::sync_with_stdio(0);
  59. cin.tie(0);
  60. srand(2130);
  61. vector<string> v;
  62. for (int b=0;b<(1<<24);++b) //QKRBN
  63. {
  64. vi cn(8);
  65. for (int i=0;i<8;++i) ++cn[(b>>(i*3))&7];
  66. if (cn[0]!=1 || cn[1]!=1 || cn[2]!=2 || cn[3]!=2 || cn[4]!=2) continue;
  67. int p1=-1,p2=-1;
  68. for (int i=0;i<8;++i) if (((b>>(i*3))&7)==3)
  69. {
  70. if (p1==-1) p1=i;
  71. else p2=i;
  72. }
  73. if ((p1+p2)%2==0) continue;
  74. p1=-1,p2=-1;
  75. for (int i=0;i<8;++i) if (((b>>(i*3))&7)==2)
  76. {
  77. if (p1==-1) p1=i;
  78. else p2=i;
  79. }
  80. bool ok=1;
  81. for (int i=0;i<8;++i) if (((b>>(i*3))&7)==1)
  82. {
  83. if (i<p1 || i>p2) ok=0;
  84. }
  85. string s,u="QKRBN";
  86. for (int i=0;i<8;++i) s.pb(u[(b>>(i*3))&7]);
  87. if (ok) v.pb(s);
  88. }
  89. for (int i=0;i<100;++i)
  90. {
  91. srand(i);
  92. mad=0;
  93. nap(v,0);
  94. cout<<i<<' '<<mad<<endl;
  95. }
  96. exit(0);
  97. while (1)
  98. {
  99. string w;
  100. cin>>w;
  101. if (w=="END") exit(0);
  102. int c;
  103. cin>>c;
  104. auto mog=v;
  105. while (mog.size()>1)
  106. {
  107.  
  108. }
  109. }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement