wing是什么_nativepage原理

wing是什么_nativepage原理给定 n 本书,编号为 1∼n。在初始状态下,书是任意排列的。在每一次操作中,可以抽取其中连续的一段,再把这段插入到其他某个位置。我们的目标状态是把书按照 1∼n 的顺序依次排列。求最少需要多少次操作。输入格式第一行包含整数 T,表示共有 T 组测试数据。每组数据包含两行,第一行为整数 n,表示书的数量。第二行为 n 个整数,表示 1∼n 的一种任意排列。同行数之间用空格隔开。输出格式每组数据输出一个最少操作次数。如果最少操作次数大于或等于 5 次,则输出 5 or more。每个

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定 n 本书,编号为 1∼n。

在初始状态下,书是任意排列的。

在每一次操作中,可以抽取其中连续的一段,再把这段插入到其他某个位置。

我们的目标状态是把书按照 1∼n 的顺序依次排列。

求最少需要多少次操作。

输入格式
第一行包含整数 T,表示共有 T 组测试数据。

每组数据包含两行,第一行为整数 n,表示书的数量。

第二行为 n 个整数,表示 1∼n 的一种任意排列。

同行数之间用空格隔开。

输出格式
每组数据输出一个最少操作次数。

如果最少操作次数大于或等于 5 次,则输出 5 or more。

每个结果占一行。

数据范围
1≤n≤15

输入样例:
3
6
1 3 4 6 2 5
5
5 4 3 2 1
10
6 8 5 3 4 7 2 9 1 10
输出样例:
2
3
5 or more

题解
IDA*,每一次变动都会改变3个数的后继,所以我们可以先统计每个数的后继,然后看看当前状态是否能达到要求。

  1. IDA*
#include<bits/stdc++.h>
using namespace std;
int n;
const int N = 1e2;
string t;
int f(){ 
   
    int tot = 0;
    for(int i = 1;i < n;i ++)
        if(t[i - 1] != t[i] - 1)tot ++;
    return (tot + 2) / 3;
}
bool IDAstar(int u,int maxn){ 
   
    if(f() > maxn - u)return false;
    if(u == maxn){ 
   
        return true;
    }
    string temp = t;
    for(int len = 1;len <= n - 1;len ++){ 
   
        for(int l = 0;l <= n - len;l ++){ 
   
            int r = l + len - 1;
            string substr = temp.substr(l,r - l + 1);
            for(int k = r + 1;k < n;k ++){ 
   
                t.insert(k + 1,substr);
                t.erase(l,r - l + 1);
                if(IDAstar(u + 1,maxn))return true;
                t = temp;
            }
        }
    }
    return false;
}
int a[N];
int main(){ 
   
    int T;
    cin>>T;
    while(T --){ 
   
        cin>>n;
        t = "";
        for(int i = 0;i < n;i ++){ 
   
            cin>>a[i];
        
            t += a[i];
        }
        int maxn = 0;
        while(maxn <= 4 && IDAstar(0,maxn) == false ){ 
   
            maxn ++;
        }
        if(maxn == 5){ 
   
            cout<<"5 or more"<<endl;
        }
        else cout<<maxn<<endl;
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168655.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月8日 下午7:00
下一篇 2022年8月8日 下午7:00


相关推荐

  • python中向下取整(round向下取整)

    fromnumpy\core_multiarray_umath.pynp.floor()deffloor(x,*args,**kwargs):#realsignatureunknown;NOTE:unreliablyrestoredfrom__doc__”””floor(x,/,out=None,*,where=True,casting=’same_kind’,order=’K’,dtype=None,subok=True[,signat

    2022年4月10日
    162
  • mysqlclient使用

    mysqlclient使用我使用的是 Python3 5 所以选择 mysqlclient 来操作 MySQL 安装 mysqlclient 要想使 python 可以操作 mysql 就需要 MySQ

    2026年3月19日
    2
  • 怎么计算crc16校验数据的校验码

    怎么计算crc16校验数据的校验码第一 CRC 16 校验码计算方法 常用查表法和计算法 计算方法一般都是 1 预置 1 个 16 位的寄存器为十六进制 FFFF 即全为 1 称此寄存器为 CRC 寄存器 2 把第一个 8 位二进制数据 既通讯信息帧的第一个字节 与 16 位的 CRC 寄存器的低 nbsp nbsp nbsp nbsp nbsp nbsp 8 位相异或 把结果放于 CRC 寄存器 高八位数据不变 3 把 CRC 寄存器的内容右移一位 朝低位 用 0 填补最高位 并检查右移后的移

    2026年3月18日
    2
  • 黑盒测试 之 因果图法

    黑盒测试 之 因果图法nbsp 因果图法是一种利用图解法分析输入条件的各种组合情况 写出判定表 从而设计测试用例的方法 nbsp 因果图法是一种适合于描述对于多种输入条件组合的测试方法 根据输入条件的组合 约束关系和输出条件的因果关系 分析输入条件的各种组合情况 从而设计测试用例的方法 它适合于检查程序输入条件涉及的各种组合情况 因果图法一般和判定表结合使用 通过映射同时发生相互影响的多个输入来确定判定条件 因果图法最终生成的就是判定表 它适合于检查程序输入条件的各种组合情况 采用因果图法能帮助我们按照一定的步骤

    2026年3月18日
    2
  • 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数…

    已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数…

    2021年7月2日
    70
  • 树莓派通过命令行连接wifi

    树莓派通过命令行连接wifi

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号