洛谷传送门:CF1689B Mystic Permutation - 洛谷 | 计算机科学教育新生态 (luogu)
难度:普及-(个人觉得只能算入门难度)
知识点: 贪心
思路:
和顺序数组比较,如果一样了,那就swap(ans[i], ans[i+1])
注意,最后一位的比较要单独讨论,因为是swap(ans[nums], ans[nums-1]),和之前写法不同
最后,讨论特判,只有n=1时,才会输出-1
AC代码:
#include<bits/stdc++.h>
using namespace std;int main(){int time; scanf("%d", &time);while(time--){int nums; scanf("%d", &nums);vector<int> arr(nums+1);vector<int> ans(nums+1);for(int i = 1; i<=nums; i++){ //读入arr数组,并且初始化答案数组scanf("%d", &arr[i]);ans[i] = i;}if(nums==1){printf("-1n");continue;}for(int i = 1; i<=nums-1; i++)if(ans[i]==arr[i]) swap(ans[i], ans[i+1]);if(ans[nums]==arr[nums]) swap(ans[nums], ans[nums-1]);for(int i = 1; i<=nums; i++) printf("%d ", ans[i]);printf("n");}return 0;
}
本文发布于:2024-02-02 19:21:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170687287445902.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |