日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Special Permutation 构造,min_element,贪心(900)

發(fā)布時(shí)間:2025/3/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Special Permutation 构造,min_element,贪心(900) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


題意 :

  • 構(gòu)造一個(gè)n(偶數(shù))的全排列,使得全排列的前半部分最小值等于a,后半部分最大值等于b,如果不能構(gòu)造,則輸出-1

思路一 :

  • 直接構(gòu)造,將a放最前,b放最后,中間從大到小放,然后構(gòu)造后判斷是否合法,不合法則直接-1
  • *min_element表示最小元素,記得加頭文件
  • cout << p[i] << " \n"[i == n - 1] 表示只有在i == n - 1才輸出\n否則輸出空格
#include <iostream> #include <unordered_map> #include <algorithm> #include <vector> #define pb push_back #define fi first; #define se second;using namespace std;void solve() {int n, a, b;cin >> n >> a >> b;vector<int> p{a};for (int i = n; i >= 1; i -- ){if (i == a || i == b) continue;p.pb(i);}p.pb(b);if (*min_element(p.begin(), p.begin() + n / 2) == a && *max_element(p.begin() + n / 2, p.end()) == b){for (int i = 0; i < n; i ++ )cout << p[i] << " \n"[i == n - 1];}else{cout << -1 << endl;} }int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int _ = 1;cin >> _;while (_ -- ){solve();}return 0; }

思路二 :

  • 就en構(gòu)造,發(fā)現(xiàn)這個(gè)做法太累贅了,比賽的時(shí)候邊界還卡了很久
  • 算邊界的時(shí)候,忘記減去邊界中的另一個(gè)空點(diǎn)了
#include <iostream> #include <unordered_map> #include <vector> #define pb push_back #define fi first; #define se second;using namespace std;void solve() {int n, a, b;cin >> n >> a >> b;if (a > b){if (b != n / 2 || n - a + 1 != n / 2){cout << -1 << endl;return ;}for (int i = a; i <= n; i ++ ) cout << i << ' ';for (int i = 1; i <= b; i ++ ) cout << i << ' ';cout << endl;}else{if (n - a < n / 2 || b - 1 < n / 2){cout << -1 << endl;return ;}for (int i = a; i <= a - n / 2 + b - 1; i ++ ) cout << i << ' ';for (int i = b + 1; i <= n; i ++ ) cout << i << ' ';for (int i = 1; i <= a - 1; i ++ ) cout << i << ' ';for (int i = a - n / 2 + b; i <= b; i ++ ) cout << i << ' ';cout << endl;} }int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int _ = 1;cin >> _;while (_ -- ){solve();}return 0; }

總結(jié)

以上是生活随笔為你收集整理的Special Permutation 构造,min_element,贪心(900)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。