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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【幅频均衡带通滤波器】基于FPGA的幅频均衡带通滤波器的设计[通俗易懂]

    【幅频均衡带通滤波器】基于FPGA的幅频均衡带通滤波器的设计[通俗易懂]1.软件版本matlab2013b,quartusii121.2.本算法理论知识带通滤波器在数字幅频均衡功率放大器中一个重要的组成部分,在介绍带通滤波器之前,我们首先来详细介绍一下数字幅频均衡功率放大器。本系统要求的指标为:本题要求在输入电压有效值为5mV的条件下,放大倍数达到400倍。而且20Hz到20kHz衰减不能超过1dB。-1dB转化为信号幅值变化为11%,可以说指标要求很高。我们可以选择使用PGA或AD620实现这一指标。整个…

    2025年8月26日
    8
  • 机房建设效果图制作|机房鸟瞰图设计|教程文章

    机房建设效果图制作|机房鸟瞰图设计|教程文章因为时间关系,这里只做简易分析,如图所示案例,首先客户得提供资料,例如CAD布置图或是手绘图纸等。这是第一步。接下来,就需要根据资料和客户沟通,什么地方是什么东西东西,有什么需要特别注意的地方吗,地面,墙面等是什么材质。剩下的基本就是建模和渲染了。建模的时候要注意,一定要注意房间的高度,因为将来还有吊顶等。一般而言,内部房间的地面材质都是防静电地板,而墙面基本就是刷白或是吸音板铝塑板之类。

    2022年6月2日
    51
  • matlab画圆函数

    matlab画圆函数function[]=circle(x,y,r)%画圆函数%circle(0,0,4);gridon%xy是中心,r是半径rectangle(‘Position’,[x-r,y-r,2*r,2*r],’Curvature’,[1,1])axisequal%为了修饰曲线的颜色,宽度,圈盘填充颜色等,可以设置其他参数等,例如%’edgecolor’,’b’,其中edgecolor表示边框颜色,后面的b是颜色参数值;%facecolor’,’r’,其中facecolor表示内部填

    2022年6月19日
    91
  • MYSQL explain执行计划解读

    MYSQL explain执行计划解读

    2022年2月11日
    52
  • Android打开相册_安卓10相册无法使用

    Android打开相册_安卓10相册无法使用最近在学习安卓的过程中,学到了从相册中选取图片的内容。//java版Activity的代码importandroid.app.Activity;importandroid.content.Intent;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.net.Uri;importandroid.os.Bundle;importandroid.view.View;

    2022年9月22日
    3
  • Redis删除策略和淘汰策略[通俗易懂]

    Redis删除策略和淘汰策略[通俗易懂]来的问题,Redis引入了定期删除策略(是他们的一个比较折中的方案)周期性轮询Redis库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除频度。实际上,在前面所说的删除策略,它针对的是expire命令进行的操作,也就是说那些具有时效性的数据(已经过期,并且还在占用内存的数据),我们在这里说的是针对那些并没有过期,或者是内存中的数据没有一个带有有效期,全是永久性数据,这时候删除策略就不起作用了,所以这个时候内存满了我们再去插入数据到内存是怎么做?删除这批key中已过期的。……

    2022年8月30日
    1

发表回复

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

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