• [CF1474E] What Is It?


    [CF1474E] What Is It?

    Description

    给定一个排列,你可以选择 (i,j (a[j]=i)),交换 (a[i],a[j]),收益为 ((i-j)^2),构造长度为 (n) 的排列,使得收益最大。

    Solution

    至多交换 (n-1) 次,距离为 (n-1) 的至多一对,距离为 (n-2,n-3,...) 的至多两对……

    最大收益为 ((n-1)^2 + 2(n-2)^2 + 2(n-3)^2 + ...)

    从顺序开始先换 (1,n),然后换 (1,n-1)(2,n),然后换 (1,n-2)(3,n),……

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1000005;
    
    int n, a[N];
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int t;
        cin >> t;
    
        while (t--)
        {
            int n;
            cin >> n;
            for (int i = 1; i <= n; i++)
                a[i] = i;
            int x = n - 1;
            vector<pair<int, int>> op;
            int ans = 0;
            for (int i = n - 1; i >= 1; i--)
            {
                if (x)
                {
                    x--;
                    swap(a[1], a[1 + i]);
                    op.push_back({1 + i, 1});
                    ans += i * i;
                }
                if (x && i < n - 1)
                {
                    x--;
                    swap(a[n], a[n - i]);
                    op.push_back({n - i, n});
                    ans += i * i;
                }
            }
            cout << ans << endl;
            for (int i = 1; i <= n; i++)
                cout << a[i] << " ";
            cout << endl;
            cout << n - 1 << endl;
            for (int i = op.size() - 1; i >= 0; i--)
                cout << op[i].first << " " << op[i].second << endl;
        }
    }
    
  • 相关阅读:
    python爬取哦漫画
    NLP系列(2)_用朴素贝叶斯进行文本分类(上)
    svm 笔记
    nlp学习笔记
    LR
    bp网络全解读
    最小二乘法
    学习参考
    pandas中的quantile函数
    泰坦尼克号与小费与乘客数量与 鸢尾花数据集
  • 原文地址:https://www.cnblogs.com/mollnn/p/14336213.html
Copyright © 2020-2023  润新知