LA 5506 Eight

基于Java17、SpringBoot、vue3、antdv-next、uniapp等主流技术构建的全场景极速开发平台 MDP内置3个web端、1个移动端 重点解决用户中心、开发者平台、管理后台3个应 MDP-主数据平台,后端项目。专注于单点登录解决方案。内置用户中心、开发者平台、管理后台3个应用。包含:单点登录、Oauth2 登录、用户身份管理、应用申请、应用接入、主数据维护、主数据订阅、主数据广播、应用接口调用、接口管理管理和查看、系统配置等功能。 立即下载

         同样是South Central USA 1998的题,POJ和HDU上的数据比较水,用BFS不加任何优化都可以AC,时间一般是三位数左右。而用A*或IDA*则可以把时间控制在10ms左右,甚至0ms!

         然而UVa Live上的这道题是多数据的,用IDA*不加优化都会超时。除此之外题目输入输出很严格,case和case之间必须有空行,在最后一组case之后不能有空行,否则会Wrong Answer..


        优化很简单,就是在搜索之前就判断一下是否有解。如果除去x之外的数字序列的逆序数是偶数,则有解;否则无解。因为在上下左右移动的过程中,数列的逆序数是不会产生变化的(在纸上画画就知道)。而目标状态的逆序数是偶数的,所以如果当前的数列逆序数是奇数则必定不能转移到目标状态。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int tar[10][2]={{-1,-1},{0,0},{0,1},{0,2},{1,0},{1,1},{1,2},{2,0},{2,1},{2,2}};
int abs(int x)
{
    return x>0?x:-x;
}
int sum;
int msb[10],msa[10];
int MergeSort(int s,int e)
{
    int mid,cnt,t1,t2,i;
    if (s >= e-1)
        return 0;
    mid=(s+e)>>1;
    cnt=MergeSort(s,mid)+MergeSort(mid,e);
    t1=s;
    t2=mid;
    i=s;
    while (t1 < mid && t2 < e)
    {
        if (msa[t1] > msa[t2])
        {
            msb[i]=msa[t1];
            t1++;
            i++;
            cnt+=t2-mid;
        }
        else
        {
            msb[i]=msa[t2];
            t2++;
            i++;
        }
    }
    while (t1 < mid)
    {
        msb[i]=msa[t1];
        i++;
        t1++;
        cnt+=t2-mid;
    }
    while (t2 < e)
    {
        msb[i]=msa[t2];
        i++;
        t2++;
    }
    for (i=s; i<e; i++)
        msa[i]=msb[i];
    return cnt;
}
void swap(int &a,int &b)
{
    int t;
    t=a;
    a=b;
    b=t;
}
class Board
{
public:
    int a[3][3];
    int x,y;
    int h;
    void readIn()
    {
        int i,j;
        char str[2];
        for (i=0; i<3; i++)
        {
            for (j=0; j<3; j++)
            {
                scanf("%s",str);
                if (str[0] == 'x')
                {
                    a[i][j]=0;
                    x=i;
                    y=j;
                }
                else
                    a[i][j]=str[0]-'0';
            }
        }
    }
    void printOut()
    {
        int i,j;
        for (i=0; i<3; i++)
        {
            for (j=0; j<3; j++)
            {
                printf("%d ",a[i][j]);
            }
            printf("\n");
        }
        printf("h=%d\n",getH());
    }

    bool checkLegal()
    {
        int b[10],i,j,k;
        k=0;
        for (i=0; i<3; i++)
        {
            for (j=0; j<3; j++)
            {
                msa[k]=a[i][j];
                if (msa[k] != 0)
                    k++;
            }
        }
        sum=MergeSort(0,8);
        if (sum%2 == 1)
            return false;
        return true;
    }
    int getH()
    {
        int cnt,i,j;
        cnt=0;
        for (i=0; i<3; i++)
        {
            for (j=0; j<3; j++)
            {
                if (a[i][j] != 0)
                    cnt+=abs(i-tar[a[i][j]][0])+abs(j-tar[a[i][j]][1]);
            }
        }
        h=cnt;
        return cnt;
    }
    bool moveUp()
    {
        if (x == 0)
            return false;
        swap(a[x-1][y],a[x][y]);
        x--;
        return true;
    }
    bool moveDown()
    {
        if (x == 2)
            return false;
        swap(a[x+1][y],a[x][y]);
        x++;
        return true;
    }
    bool moveLeft()
    {
        if (y == 0)
            return false;
        swap(a[x][y-1],a[x][y]);
        y--;
        return true;
    }
    bool moveRight()
    {
        if (y == 2)
            return false;
        swap(a[x][y+1],a[x][y]);
        y++;
        return true;
    }
};
int lim;
char ans[120];
bool IDDFS(int dep,Board b,char pr)
{
    /*printf("%d %d\n",dep,lim);
    b.printOut();
    getchar();*/
    Board tb;
    b.getH();
    if (b.h == 0)
        return true;
    if (dep > lim)
        return false;
    if (b.h+dep > lim)
        return false;
    tb=b;
    if (pr != 'd' && (tb.moveUp() == true))
    {
        ans[dep]='u';
        if (IDDFS(dep+1,tb,'u') == true)
            return true;
    }
    tb=b;
    if (pr != 'u' && (tb.moveDown() == true))
    {
        ans[dep]='d';
        if (IDDFS(dep+1,tb,'d') == true)
            return true;
    }
    tb=b;
    if (pr != 'r' && (tb.moveLeft() == true))
    {
        ans[dep]='l';
        if (IDDFS(dep+1,tb,'l') == true)
            return true;
    }
    tb=b;
    if (pr != 'l' && (tb.moveRight() == true))
    {
        ans[dep]='r';
        if (IDDFS(dep+1,tb,'r') == true)
            return true;
    }
    return false;
}
int main()
{
    int prob;
    Board b;
    scanf("%d",&prob);
    while (prob--)
    {
        b.readIn();
        b.getH();
        if (b.h == 0)
        {
            printf("\n");
            if (prob > 0)
                printf("\n");
            continue;
        }
        if (b.checkLegal() == false)
        {
            printf("unsolvable\n");
            if (prob > 0)
                printf("\n");
            continue;
        }
        for (lim=1; lim<100; lim++)
        {
            if (IDDFS(0,b,'w') == true)
                break;
        }
        if (lim == 100)
        {
            printf("unsolvable\n");
            if (prob > 0)
                printf("\n");
        }
        else
        {
            ans[lim]='\0';
            printf("%s\n",ans);
            if (prob > 0)
                printf("\n");
        }
    }
}


科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx 科技中介服务机构想要提升服务效率,需要哪些数智工具支持? 立即下载

相关推荐

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

UVa 11212 Editing a Book

黑书P207 例题 IDA* 搜索,估价函数设计得很经典。 #include #include #include using namespace std; class Board { public: int a[16]; int h; int n; bool readIn() { int i; scanf("%d",

仰望圣光的plusplus7 2068

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

POJ 2870 Light Up

题意简述:在n*m的格子中放置灯泡。其中格子中有些障碍,灯光可以照亮上下左右的格子,光线会被障碍挡住。 题目解法:搜索。         每个状态的转移会产生很多状态,而目标状态有是不固定的,所以不能BFS或双向BFS。但是DFS又很容易陷入搜索到很深但是却又是错误的状态,而最优解的深度又是不深。所以考虑使用迭代加深搜索。         剪枝:搜到每个障碍时,发现上面的格子是空的,剪枝。

仰望圣光的plusplus7 1791

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)内容概要:本文主要介绍了基于Plecs的全桥LLC谐振变换器仿真模型,涵盖变频控制下的多相交错LLC谐振变换器闭环仿真、V2G电动汽车ACDC整流与双向CLLC谐振变换器充放电仿真、LLC谐振变换器的开环与闭环软启动设计,以及储能系统中双向Buck-Boost变换器结合模型预测电流控制和电压下垂控制的仿真研究。同时,文档列举了多种电力电子系统与控制策略的Simulink/Plecs仿真案例,涉及三相交错并联Buck变换器、三电平Buck直流变换器、单相Boost PFC电路等,展示了丰富的电力变换器建模与控制技术。此外,还包括参数设计报告、计算书及相关参考文献,适用于从事电力电子、新能源发电、电动汽车充放电系统等领域的研究人员和技术开发人员。; 适合人群:具备电力电子、自动控制理论基础,从事新能源、电动汽车、电力系统等相关领域研究的研发人员、高校研究生及高年级本科生。; 使用场景及目标:① 学习和掌握LLC谐振变换器及其他典型电力电子变换器的工作原理与建模方法;② 实现闭环控制策略如变频控制、软启动、模型预测控制、下垂控制等的仿真验证;③ 支持科研项目、毕业设计或工程开发中的系统仿真与优化设计。; 阅读建议:建议结合文中提供的仿真模型、设计报告与参考文献,逐步搭建并调试相应系统,重点关注控制策略的实现细节与参数整定过程,以深入理解系统动态响应特性与控制性能。

AES-GCM加密认证模式:原理、优势与实战应用

在数据安全领域,加密与认证是保障信息机密性和完整性的两大基石。加密确保数据内容不被窃取,而认证则验证数据来源的真实性和传输过程中是否被篡改。传统的加密后认证方案如AES-CBC+HMAC需要串行处理,性能开销较大。GCM(伽罗瓦/计数器模式)作为一种认证加密(AEAD)方案,巧妙地将AES-CTR加密与基于伽罗瓦域的GHASH认证并行结合,实现了单次数据遍历即可同时完成加密和认证,大幅提升了处理效率。其核心价值在于高性能、支持附加认证数据(AAD)以及标准化程度高,广泛应用于TLS协议、无线网络安全和云存储

weixin_28622215的博客 315

【博客搬家】本博客已全面停止更新,新博客地址 plusplus7.com

新博客地址:http://www.plusplus7.com

仰望圣光的plusplus7 1532

Yersinia:layer 2攻击框架!全参数详细教程!Kali Linux教程!

Yersinia是一个专为执行二层网络攻击设计的框架,利用多种网络协议的弱点进行渗透测试和网络分析。它支持针对生成树协议(STP)、思科发现协议(CDP)、动态中继协议(DTP)、动态主机配置协议(DHCP)、热备用路由器协议(HSRP)、802.1q、802.1x、交换机间链路协议(ISL)和VLAN中继协议(VTP)的攻击。这些攻击可能导致网络中的拒绝服务(DoS)或为更复杂的攻击创造条件。Yersinia对渗透测试人员和网络管理员非常有用,但使用时需谨慎,以免造成网络不稳定。

qq_24305079的博客 2281

LA 3618 Cubic Eight-Puzzle

立体的八数码问题。         普通的DFS和BFS就别想了,迭代加深TLE,而用启发式搜索又想不到合适的启发函数。可发现目标状态有固定的2^8种,而状态转移的方式最多只有4种......所以用双向bfs,应该能解决问题。因为会产生很多重复的状态,所以用hash表判断一下重复的状态。stl的hash会TLE,所以还是手写静态链表哦。 #include #include #include

仰望圣光的plusplus7 1415

S32的进阶之路->3,S32DS新建/删除/导入工程

右击工程名,点击Delect进行工程删除。选中Delect project contents on disk则会彻底删除工程,不选中Delect project contents on disk工程文件会保存在工作空间中。在Improt Projects中选择工程所在文件夹,选中所需要导入的工程,勾选Copy projects into workspace。选中目标示例工程,点击Finish,完成创建工程。导入已有工程,右击右击Project Explorer空白处,选择Import。

LC_8575的博客 2227

Appstore 3.2(f)违规自救指南:从触发到申诉的完整应对策略

本文详细解析了Appstore 3.2(f)违规的应对策略,从触发原因到申诉流程,帮助开发者有效自救。文章涵盖隐瞒行为、账户关联和信息造假三大违规场景的判定逻辑,并提供申诉信写作的黄金法则和长期合规防御措施,确保开发者能够顺利通过苹果审核。

weixin_29304985的博客 662

POJ 2132 Cow Math

此题我用的DFS过。 DFS每一条路,用res=gcd(res,now),不断更新res值。当访问到2时,用ans=lcm(ans,res),更新答案,即可。 剪枝:如果当前的ans可以整除当前的res,就剪掉,因为当ans%res=0,必然有lcm(ans,res)=ans。 剩余一个疑问就是:为什么lcm(a,b,c)=lcm(lcm(a,b),c)? #include #i

仰望圣光的plusplus7 1129

神领物流-day01-项目概述

公司从2019年开始业务快速扩张,网点数量从138家扩展至540家,车辆从170台增长到800台。同时,原有的系统非常简单,比如车辆的调度靠人工操作、所有的货物分拣依靠人员,核心订单数据手动录入,人效非常低。随着业务不断演进,技术的不断提升,原有运输管理系统已无法满足现有快速扩展下的业务需求,但针对现有系统评估后发现,系统升级成本远高于重新研发。因此,公司决定基于现有业务体系进行重新构建,打造一套新的TMS运输系统,直接更替原有系统。

心飞为你飞 2255

POJ 2137 Cowties

题意: n个点集,在每个点集里面选一个点,把所有的点按照编号连接成一个环,使连线长度最短。 解法是,枚举第一个点集的每一个点,设为起始点,逐步递推求长度,最后选择答案最小的那个。 需要注意的是,最后的答案是要输出整数,直接强制类型转换,用%.0f是会WA的。 #include #include #include #include #include using namesp

仰望圣光的plusplus7 1096

【实战指南】基于YOLOv11的肺结节检测系统开发与优化(LUNA2016数据集)

本文提供了基于YOLOv11模型和LUNA2016数据集开发肺结节检测系统的完整实战指南。详细介绍了从环境搭建、数据预处理、模型训练与优化,到构建Web应用系统的全流程,旨在帮助开发者快速掌握医疗影像AI项目的核心开发技能。

weixin_29031057的博客 141

在isaacsim仿真系统进行遥操作(设备是quest3):怎么让遥操作设备(quest3)在Isaac sim系统中控制机械臂并把其中的参数传输出来??

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

**My Coding Family** 942

POJ 1416 Shredding Company

这题主要还是理解题意。 给你一个数n,和一串长度不超过6的数字。问怎么分割这串数字可以使得分割后的数和不大于n,注意数字的顺序不能打乱。如有多个答案,取最接近n的解。 如果不能成功分割,输出error,如果有多个最佳答案,输出rejected。 解法很简单,就搜索一下就好了~ #include #include #include #include using namespa

仰望圣光的plusplus7 1047

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

BNUOJ 3881 Jigsaw Puzzles

USACO Elite 2008 December Competition Silver 题意:给你一些正方形的拼图碎块,每个碎块有四个边,每边都有一个记号,分别是小写字母a-z。其中没有标记的边,也就是边界的边用'0'标记。题目给定一个矩阵,把这些碎块放进去,要求每个边相接的记号必须一样,边界上的边必须是'0'。 解法:DFS。这个操作起来还是挺麻烦的,做处理的时候要小心一些。

仰望圣光的plusplus7 966

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

POJ 2133 Cow Imposters

因为牌子的种类最多有2^16个,所以搜索一下就可以得到答案。 #include #include #include #include #include using namespace std; struct T { int n; int c; }; queue q; int tar,len,le,v[68000],E[120]; char str[20]="11001"

仰望圣光的plusplus7 860

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

POJ 1753 Flip Game 状态压缩 枚举

POJ 1753 枚举,压缩状态,bfs~ #include #include #include #include #include using namespace std; int pow2[17]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536}; int change[16]={51200,

仰望圣光的plusplus7 744

POJ 3185 The Water Bowls

此题我是写了个BFS过的,用的队列是STL的queue,960ms过的。。 用2进制来压缩状态,然后列出20种操作数op[i]。 于是在i处的操作就等同于对now=now^op[i],和Flip Game的处理方法一样。 但是他们写的BFS会TLE就不知道为什么了。。还有用DFS过的= = 后来,得知了一个枚举加贪心的方法,但是没法证明是最优的,得去查查资料。 #include #i

仰望圣光的plusplus7 730

BNUOJ 3884 Hay Expenses

看第一眼,觉得是很裸的线段树,再看数据范围。。。就彻底无语了。。。 #include #include using namespace std; int main() { int n,a[510],i,s,e,ans,q; scanf("%d%d",&n,&q); for (i=1; i<=n; i++) { scanf("%d",a+i);

仰望圣光的plusplus7 618

POJ 2531 Network Saboteur

求无向完全图的最大割,n只有20,所以暴力可以过O(20*2^n)。 有个剪枝就是,贪心地选取下一个点。如果发现把点加入另一个集合,割值减少了,就不添加。 然后看了discuss发现有人说可以用什么随机算法过,于是就搜索了一下。。 随机化算法,是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。随机化算法基于随机方法,依赖于概率大小。

仰望圣光的plusplus7 602

POJ 1426 Find The Multiple

暴力求解,本地打表。 #include #include #include using namespace std; unsigned long long ans[300]={0,1, 10, 10000000000000000011, 100, 10, 10000000000000000110, 10000000000000000011, 1000, 10000000000011111

仰望圣光的plusplus7 563
上一篇: LA 3211 Now or later
下一篇: POJ 3852 String LD
plusplus7
博客等级 码龄15年 59粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值