orazma

codes.cpp

Jun 22nd, 2026
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define f first
  4. #define s second
  5. #define pb push_back
  6. #define mp make_pair
  7. #define ll long long
  8.  
  9. #define IOS ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  10.  
  11. using namespace std;
  12. const int MAXN = 1e6 + 10;
  13. const int INF = 1e9 + 7;
  14. const int EPS = 1e-6;
  15.  
  16. int dx[4] = {-1, 0, 0, 1};
  17. int dy[4] = {0, -1, 1, 0};
  18. pair <string, int> a[MAXN];
  19. int last1[MAXN], last2[MAXN];
  20. int dp[MAXN];
  21. void solve(){
  22.  
  23.     for (int i = 0; i < n; i++)
  24.         dp[(1 << i)][i] = 1;
  25.  
  26.     for (int mask = 1; mask < (1 << n); mask++){
  27.         for (int i = 0; i < n; i++){
  28.             if (((mask >> i) & 1) == 1){
  29.                 for (int j = 0; j < n; j++){
  30.                     if (((mask >> j) & 1) == 0 && abs(i - j) <= k){
  31.                         dp[mask | (1 << j)][j] += dp[mask][i];
  32.                     }
  33.                 }
  34.             }
  35.         }
  36.     }
  37.  
  38.  
  39.     for (int i = 2; i <= n; i++){
  40.         for (int k = 1; k <= 2 * i; k++){
  41.             for (int mask1 = 0; mask1 < 4; mask1++){
  42.                 for (int mask2 = 0; mask2 < 4; mask2++){
  43.                     int add = check(mask1, mask2);
  44.                     dp[i][k + add][mask2] += dp[i - 1][k][mask1];
  45.                 }
  46.             }
  47.         }
  48.     }
  49.  
  50.     cin >> s;
  51.     ma[s] = i;
  52.  
  53.     for (int mask = 0; mask < (1 << n); mask++){
  54.         bool flag = false;
  55.         for (int i = 1; i <= m; i++){
  56.             int num1 = ma[x[i]];
  57.             int num2 = ma[y[i]];
  58.             if (((mask >> num1) & 1) && ((mask >> num2) & 1))
  59.                 flag = true;
  60.         }
  61.         if (!flag){
  62.             int cnt = __builtin_popcount(mask);
  63.             if (ans < cnt){
  64.                 ans = cnt;
  65.                 best_mask = mask;
  66.             }
  67.         }
  68.     }
  69.  
  70.  
  71.     int n, m;
  72.     cin >> m >> n >> s;
  73.  
  74.     for (int i = 1; i < m; i++){
  75.         cnt[s[i - 1] - 'a'][s[i] - 'a']++;
  76.         cnt[s[i] - 'a'][s[i - 1] - 'a']++;
  77.     }
  78.  
  79.     for (int mask = 0; mask < (1 << n); mask++){
  80.         int pos = __builtin_popcont(mask) + 1;
  81.         for (int i = 0; i < n; i++){
  82.             if (((mask >> i) & 1) == 0){
  83.  
  84.                 int sum = 0;
  85.                 for (int j = 0; j < n; j++){
  86.                     if (i == j) continue;
  87.  
  88.                     if (((mask >> j) & 1) == 0){
  89.                         sum -= pos * cnt[i][j];
  90.                     }
  91.                     else{
  92.                         sum += pos * cnt[i][j];
  93.                     }
  94.                 }
  95.                 dp[mask | (1 << j)] = min(dp[mask | (1 << j)],
  96.                                           dp[mask] + sum);
  97.             }
  98.         }
  99.     }
  100.     cout << dp[(1 << n) - 1];
  101.  
  102.  
  103. }
  104. int main() {
  105.     IOS;
  106.     int t = 1;
  107.     cin >> t;
  108.     while(t--){
  109.         solve();
  110.     }
  111.     return 0;
  112. }
  113.  
  114.  
  115.  
Advertisement
Add Comment
Please, Sign In to add comment