站外题求问
  • 板块题目总版
  • 楼主DPOI
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/2 18:35
  • 上次更新2025/7/3 13:37:31
查看原帖
站外题求问
1690315
DPOI楼主2025/7/2 18:35

题意: 给定整数 NN,构造排列 a1,a2,,aNa_1, a_2, \dots, a_N 满足:

  • i{1,2,,N},aii.\forall i \in \{1, 2, \dots, N\}, \quad a_i \neq i.
  • 定义 S(a)=i=1NaiiS(a) = \sum_{i=1}^N |a_i - i| ,需在所有满足条件的排列中使 S(a)S(a) 最大。

在所有满足条件的排列中,选择字典序最小的一个输出。

我的思路:

我尝试举反例没有举出来的一个性质:只要满足 aia_i 不等于 ii 的序列得到的“神祈值”相等,所以只要构造一个满足条件的,字典序最小的序列即可。

然后我就尝试构造,我想了一个简单思路就是说这个:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;cin>>n;
    for (int i=1;i<=n;++i){
        if (i+1<=n)cout<<i+1<<" ";
        else cout<<(i+1)%n<<" ";
    }
}

还有这个:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;cin>>n;
    deque<int>dq;
    for (int i=1;i<=n;++i){
        dq.push_back(i);
    }
    for (int i=1;i<=n;++i){
        if (dq.front()!=i)cout<<dq.front()<<" ";
        else {
            int x=dq.front();
            dq.pop_front();dq.push_back(x);
            cout<<dq.front()<<" ";
        }
    }
}

都全部 WA 了,求大佬指点。

2025/7/2 18:35
加载中...