Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4. #include <algorithm>
  5. #include <map>
  6. #include <bitset>
  7. #pragma GCC optimize("Ofast,no-stack-protector")
  8. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
  9. #pragma GCC optimize("unroll-loops")
  10. #pragma GCC optimize("fast-math")
  11.  
  12. using namespace std;
  13.  
  14. const int LOL = 900;
  15.  
  16. int n;
  17. vector <int> graph(30);
  18.  
  19. int main() {
  20. ios_base::sync_with_stdio(false);
  21. cin.tie(nullptr);
  22. cout.tie(nullptr);
  23. cin >> n;
  24. for (int i = 0; i < n; i++) {
  25. for (int j = 0; j < n; j++) {
  26. char x;
  27. cin >> x;
  28. if (x == 'Y')
  29. graph[i] |= (1 << j);
  30. }
  31. }
  32. string s = "";
  33. for (int i = 0; i < LOL; i++)
  34. s += '0';
  35. vector <int> smth;
  36. for (int i = 0; i < n; i++)
  37. smth.push_back(i);
  38. random_shuffle(smth.begin(), smth.end());
  39. for (int i = 0; i < n; i++) {
  40. int all = 0;
  41. all |= (1 << i);
  42. for (int o = 0; o < LOL; ++o) {
  43. int new_all = 0;
  44. for (int v = 0; v < n; ++v) {
  45. if ((all >> v) & 1)
  46. new_all |= graph[v];
  47. }
  48. all = new_all;
  49. if ((all >> i) & 1)
  50. s[o] = '1';
  51. }
  52. }
  53. string ans = "(" + s + ")";
  54. for (int p = 0; p < 700; ++p) {
  55. for (int len = 1; len <= LOL; ++len) {
  56. if (p + len > (int)s.size())
  57. break;
  58. string need = "";
  59. for (int i = p; i < p + len; ++i)
  60. need += s[i];
  61. bool fl = true;
  62. for (int i = p + len; i < (int)s.size(); i += len) {
  63. string now = "";
  64. for (int j = i; j < min((int)s.size(), i + len); ++j)
  65. now += s[j];
  66. bool flag = true;
  67. //cout << p << " " << len << " " << need << " " << now << " aa\n";
  68. for (int k = 0; k < min((int)need.size(), (int)now.size()); k++) {
  69. if (need[k] != now[k]) {
  70. flag = false;
  71. break;
  72. }
  73. }
  74. if (!flag) {
  75. fl = false;
  76. break;
  77. }
  78. }
  79. if (fl) {
  80. string res = "";
  81. for (int i = 0; i < p; ++i)
  82. res += s[i];
  83. res += '(';
  84. res += need;
  85. res += ')';
  86. if ((int)res.size() < (int)ans.size())
  87. ans = res;
  88. }
  89. }
  90. }
  91. cout << ans << "\n";
  92. return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement