您当前的位置: 首页 > 

2022杭电多校(九)

Lusfiee 发布时间:2022-09-24 17:43:48 ,浏览量:5

2022杭电多校(九)

文章目录
  • 2022杭电多校(九)
    • 一、比赛小结
    • 二、题目分析及解法(基础题)
      • 1001、Arithmetic Subsequence
      • 1003、Fast Bubble Sort
      • 1007、Matryoshka Doll
      • 1008、Shortest Path in GCD Graph
      • 1010、Sum Plus Product
    • 三、题目分析及解法(进阶题)

一、比赛小结

比赛链接:

二、题目分析及解法(基础题) 1001、Arithmetic Subsequence

题目链接:Problem - 7233 (hdu.edu.cn)

题意:

题目描述. 给一个长度为𝑁的整数序列𝐴 = (𝐴𝑖),问能否将该序列重排得到序列𝐵 = (𝐵𝑖),满足

• 1 ≤ 𝑖 < 𝑗 < 𝑘 ≤ 𝑁;

• (𝐵𝑖 , 𝐵𝑗 , 𝐵𝑘 )不构成等差序列。

题解:

首先如果某个数出现次数大于等于3则不存在解。然后如果所有数字均为偶数,我们可将所有数除以二;如果所有数字均为奇数,我们可将所有数减去一;否则,我们将所有奇数放在左边,所有偶数放在右边,对奇数/偶数分治解决。单组数据时间复杂度𝑂(𝑛 log max𝐴𝑖)。

代码:

// #pragma comment(linker, "/STACK:102400000,102400000")
#pragma GCC optimize("O3")
#pragma GCC optimize("O2")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
// #pragma GCC optimize("trapv")
#include 
// #include 
#define int long long
#define double long double
// #define i128 long long
// #define double long double
using namespace std;

#define rep(i, n) for (int i = 0; i > a[i];
    map cnt;
    ans.clear();
    rep(i, n) {
      cnt[a[i]]++;
      if (cnt[a[i]] > 2) {
        cout             
关注
打赏
1688896170
查看更多评论
0.0558s