博客
关于我
CF 1372C Omkar and Baseball(错排)
阅读量:127 次
发布时间:2019-02-27

本文共 1212 字,大约阅读时间需要 4 分钟。

错排问题是指给定一个排列,让调整次数最少地将其变为有序排列。输出的答案次数只能是0、1、2中的一个。以下是解决该问题的详细分析:

首先,理解错排的定义:错排是指元素不在它们对应的位置上的情况。例如,序列1,3,2中的第二个元素3不在对应的位置上,属于错排。

接下来,分析调换次数的可能性:

  • 调换次数为0:如果序列已经是有序的,直接输出0。
  • 调换次数为1:当错排的子段数量恰好为1时,只需进行一次调换即可解决问题。
  • 调换次数为2:如果错排的子段数量大于等于2,则需要至少两次调换才能将所有元素调整到正确位置。
  • 具体步骤如下:

  • 遍历序列:从第一个元素开始,检查每个元素是否在正确位置上。
  • 统计错排子段:当发现一个元素不在正确位置时,计数加一,并标记进入一个新的错排子段。当遇到正确位置的元素时,标记退出错排子段。
  • 根据子段数量决定调换次数:如果错排子段数量为0,输出0;如果为1,输出1;否则,输出2。
  • 代码实现示例

    #include 
    #include
    using namespace std;int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); int t, n; for (t = 0; t < 10; ++t) { cout << "\n"; cin >> n; int flag = 1, cnt = 0; for (int i = 1; i <= n; ++i) { int a; cin >> a; if (a != i && flag == 1) { cnt++; flag = 0; } if (a == i) { flag = 1; } } if (cnt == 0) { cout << "0"; } else if (cnt == 1) { cout << "1"; } else { cout << "2"; } }}

    示例解释

    • 输入处理:读取测试用例数t和每个测试用例的长度n。
    • 遍历序列:对于每个元素i,读取输入的值a。
    • 检查位置:如果a不等于i且处于错排子段内,计数加一并标记进入新的子段。遇到正确位置时,标记退出子段。
    • 输出结果:根据错排子段数量输出0、1或2。

    通过这种方法,可以有效地解决错排问题,确保最少的调换次数将序列变为有序。

    转载地址:http://nufb.baihongyu.com/

    你可能感兴趣的文章
    MySQL InnoDB事务隔离级别与锁机制深入解析
    查看>>
    Mysql InnoDB存储引擎 —— 数据页
    查看>>
    Mysql InnoDB存储引擎中的checkpoint技术
    查看>>
    Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
    查看>>
    MySQL InnoDB引擎的锁机制详解
    查看>>
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    MySQL Join算法与调优白皮书(二)
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>