Skip to content

泉州一中信息学Blog

信息学奥赛技术分享博客

  • 登录
  • 小学oj
  • 中学oj
  • 测试页面1
  • Toggle search form

HLOJ-TEST ROUND 4-T1/T2(构造)- 2

Posted on 2025年2月12日 By 张, 高畅 HLOJ-TEST ROUND 4-T1/T2(构造)- 2无评论

理论不应该发两篇相同的内容的

但是理论是理论,现实是现实,blog 会吃字数。

分析/正解

为什么会这样呢?

其实以上的操作就类似于冒泡排序,而在最劣情况下,交换数达到 n^2,序列长度就超了。

然后根据题解,是有更聪明的构造方法的。

我们令原本输入的 a 数组变为 c 数组,并将 a 数组最开始定义为 [1, 2, 3, …,n]。
将 b 每 n – 1 个分一段,每一段在上一次的基础上作修改。

这个过程可以看成是一个 p 指针一直在 [2,n] 上循环移动,每次移动后决定 a_1 是否与 a_p 进行交换,将最终的 a_p 加入 b 的末尾,并且最终将这个 a 数组变成 c 数组。

在上面的基础上,我们有一个贪心的策略。

  • 若当前 a_1 \neq c_1 ,将 p 移动到 a_1 的目标位置(就是 c_p = a_1),并将 a_1 与 a_p 交换,使 a_1 归位。
  • 若当前 a_1 = c_1,那么我们找到第一个 a_p \neq c_p 的位置,并将 a_1 与 a_p 交换,强制变成上面的那种情况。

(不太会的)正确性分析:

长度上:

  • $a_1 = c_1$ 的情况出现的次数只与排列中环的个数有关,而这是 $\ln n + O(1)$ 的。
  • 对于 a_1 \neq c_1 的情况,每次期望移动 \frac{n}{2} 步,所以总的移动次数是 \frac{n^2}{2} 级别的。

字符顺序上:

每次若不进行交换,那么当前输出时一定和上一次输出相隔 n – 1 个,满足要求。

若进行交换,那么这个 a_1 一定是因为前面原本要输出的时候突然被换掉,而在前面原本要输出位置,相隔距离就已经有 n – 1 了,放后面输出肯定距离也是满足要求的。

[Code]

#include 
using namespace std;
const int File = 1;
#define FRE if(File)
const int N = 1005, M = 550000;
int n, a[N], c[N];
vector res;
int main()
{
    FRE freopen("perm.in", "r", stdin);
    FRE freopen("perm.out", "w", stdout);
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++)
    {
        a[i] = i;
        scanf("%d", &c[i]);
        res.push_back(i);
    }
    while (1)
    {
        int flag = 1;
        if (a[1] != c[1])
        {
            for (int p = 2;p <= n;p ++)
            {
                if (c[p] == a[1])
                {
                    swap(a[1], a[p]);
                    flag = 0;
                }
                res.push_back(a[p]);

            }
        }
        else
        {
            for (int p = 2;p <= n;p ++)
            {
                if (a[p] != c[p])
                {
                    swap(a[1], a[p]);
                    flag = 0;
                }
                res.push_back(a[p]);
            }
        }
        if (flag)break;
    }
    for (int i = 1;i <= n; i ++)res.push_back(a[i]);
    printf("%d\n", res.size());
    for(auto i : res)printf("%d ", i);
    return 0;
}

[T2/Unfound 6]

题面

[题目描述]

给定正整数 n,有两个长度为 n 的整数数列 {a_n}, {b_n},请你找到两个非负整数 x, y 和一个非负整数数列 {$cn},最小化 \sum{i=1}^n(|a_i-c_ix|+|b_i-c_iy|)$。

你只需要输出这个式子的最小值即可。

[输入格式]

第一行,一个正整数 n。

第二行,n 个非负整数 a_1, a_2, …, a_n。

第三行,n 个非负整数 b_1, b_2, …, b_n。

[输出格式]

一行,一个非负整数,表示答案。

[Sample 1]

input
1 3
2 1 1 4
3 5 1 4
output
1 4

[数据范围与子任务]

对于所有数据,1 \leq n \leq 30,0 \leq a_i, b_i \leq 10^8。

测试点 $n \leq$ 特殊性质
1 ~ 3 $30$ $a_i, b_i \leq 100$
4 ∼ 7 $30$ $a_i, b_i \leq 10^5$
8 $30$ $b_i = 0$
9 ~ 14 $8$ 无
15 ~ 17 $25$ 无
18 ~ 20 $30$ 无

闲话/部分分

考场上的 AC 代码全部使用了随机化。

评价是随机化真香。

但是后面加强数据了,成功把随机化全部卡掉。

所以建议大家还是学一学时钟打点来记时。

训练日志

文章导航

Previous Post: HLOJ-TEST ROUND 4-T1/T2(构造)- 1
Next Post: HLOJ-TEST ROUND 4-T1/T2(构造)- 3

发表回复 取消回复

要发表评论,您必须先登录。

2025年 6月
一 二 三 四 五 六 日
 1
2345678
9101112131415
16171819202122
23242526272829
30  
« 2月    

2024常州 Class Classic OI Problems Contest cqr的长乐集训2023 CZYZ LOC New Game NOI NOIP Password Protected PM_PK Preview Problems Retrospect Selfmade Qusetion STL The end Training Uneasy Problem 蒟蒻 通报

  • 训练日志
  • 链表
  • 入门
  • 模拟
  • dfs序
  • 并查集
  • spfa
  • 最小割
  • 矩阵树定理
  • 仙人掌
  • BSGS
  • 凸包
  • 回文自动机
  • 递推与动归
  • 堆
  • 莫队算法
  • ST表
  • Treap
  • 树套树
  • 可持久化线段树
  • 初赛
  • 搜索
  • 贪心
  • 深度优先搜索
  • 欧拉图
  • dijkstra
  • 费用流
  • 哈夫曼树
  • kruskual
  • 置换
  • 旋转卡壳
  • KMP
  • 区间动归
  • STL
  • 链表
  • 可并堆
  • sply
  • 主席树
  • 可持久化字典树
  • 算法
  • 动态规划
  • 构造
  • 广度优先搜索
  • 最短路
  • floyd
  • 最大流
  • 虚树
  • prim
  • 筛法
  • 半平面交
  • 字典树
  • 背包动归
  • 基础数据结构
  • 分块
  • 线段树
  • 替罪羊树
  • K-DTree
  • 图论
  • 二分法
  • 迭代搜索
  • 拓扑排序
  • 有上下界网络流
  • 生成树
  • 快速幂
  • 后缀数组
  • 树形动归
  • 哈希表
  • 中级数据结构
  • 平衡树
  • 可持久化数据结构
  • 数据结构
  • 三分法
  • 启发式搜索
  • 图的连通
  • 点分治
  • 博弈论
  • AC自动机
  • 状压动归
  • 单调栈
  • 树状数组
  • 高级数据结构
  • OI资料
  • 数学
  • 高精度
  • 差分约束
  • 树上倍增
  • 素数测试
  • 后缀自动机
  • 数位动归
  • 单调队列
  • 新闻
  • 几何
  • 随机化
  • 二分图染色
  • 树链剖分
  • 欧拉函数
  • manacher
  • 斜率优化
  • 离线处理
  • 信息学奥赛学长风采
  • 字符串
  • 二分图匹配
  • prufer编码
  • 卡特兰数
  • 密码学
  • 决策单调
  • 赛后总结
  • 其他
  • 2-SAT
  • 最近公共祖先
  • 矩阵乘法
  • 记忆化搜索
  • 网络流
  • Link cut tree
  • 排列组合
  • 树
  • 高斯消元
  • 乘法逆元
  • 容斥原理
  • 调和级数
  • 概率与期望
  • 模线性方程组
  • 莫比乌斯反演
  • 快速傅里叶变换
  • 扩展欧几里德
  • 最大公约数与最小公倍数

近期文章

  • DP杂题
  • 2025年2月13日模拟赛
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 3
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 2
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 1

近期评论

归档

  • 2025年2月
  • 2025年1月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月

Copyright © 2025 泉州一中信息学Blog.

Powered by PressBook WordPress theme