洛谷【p2817】 宋荣子的城堡

本文介绍洛谷P2817宋荣子的城堡问题,探讨如何通过重新设定每个房间的编号使得从特定房间出发能够满足特定条件的路径规则。文章提供了完整的解题思路与代码实现,包括暴力搜索处理前k个点的方案及剩余点的计算。
部署运行你感兴趣的模型镜像

洛谷【p2817】 宋荣子的城堡

题目描述

saruka有一座大大的城堡!城堡里面有n个房间,每个房间上面都写着一个数字p[i]。有一天,saruka邀请他的小伙伴LYL和MagHSK来城堡里玩耍(为什么没有妹子),他们约定,如果某一个人当前站在i号房间里,那么下一步他就要去p[i]号房间,在下一步就要去p[p[i]]号房间。

为了增加趣味性,saruka决定重新书写一下每个房间的p[i],以满足:

<1>如果从编号为1-k的某个房间走,按照规则走,必须能走回1号房间。特别的,如果从1号房间开始走,也要走回1号房间。(至少走一步,如果p[1] = 1,从1走到1也算合法)

<2>如果从编号大于k的房间开始,按照规则走,一定不能走到1号房间。

saruka想知道,一共有多少书写p[i]的方案可以满足要求?

输入输出格式

输入格式:
共一行两个数字n,k,含义如题。

输出格式:
一个数字,表示合法的方案数。答案对10 ^ 9 + 7取模。

输入输出样例

输入样例#1:
5 2
输出样例#1:
54
输入样例#2:
7 4
输出样例#2:
1728
说明

1 <= n <= 10 ^ 18

1 <= k <= min(8,n)

思路:

对于k小于等于8,我们可以暴搜提前处理出前k个点所有可能的答案,剩余的n-k个点的答案种数为m^m,需用快速幂。
最后将前k个点的答案与剩下n-k个点的答案相乘。

题解:

#include<iostream>
#include<cstdio>
using namespace std;
const long long mod=1000000000+7;
long long a[9]={0,1,2,9,64,625,7776,117649,2097152};
long long ksm(long long x,long long y)
{
    if(y==0)
    {
        return 1;
    }
    long long ans=ksm(x,y/2);
    ans=((ans%mod)*(ans%mod))%mod;
    if(y%2==1)
    {
        ans=((x%mod)*(ans%mod))%mod;
    }
    return ans;
}
int main()
{
    long long n,k;
    scanf("%lld%lld",&n,&k);
    long long m=n-k;
    printf("%lld",((a[k]%mod)*(ksm(m,m)%mod))%mod);
    return 0;
}

暴搜:

#include<iostream>
#include<cstdio>
using namespace std;
int a[10];
int ans=0;
int n;
int ddfs(int x,int step)
{
    if(step>n)
    {
        return 0;
    }
    if(x==1)
    {
        return 1;
    }
    ddfs(a[x],step+1);
}
void check()
{
    bool flag=1;
    for(int i=1;i<=n;i++)
    {
        if(!ddfs(a[i],0))
        {
            flag=0;
        }
    }
    if(flag)
    {
        ans++;
    }
}
void dfs(int x)
{
    if(x>n)
    {
        check();
        return;
    }
    for(int i=1;i<=n;i++)
    {
        a[x]=i;
        dfs(x+1);
    }
}
int main()
{
    cin>>n;
    dfs(1);
    cout<<ans;
    return 0;
}

您可能感兴趣的与本文相关的镜像

Dify

Dify

AI应用
Agent编排

Dify 是一款开源的大语言模型(LLM)应用开发平台,它结合了 后端即服务(Backend as a Service) 和LLMOps 的理念,让开发者能快速、高效地构建和部署生产级的生成式AI应用。 它提供了包含模型兼容支持、Prompt 编排界面、RAG 引擎、Agent 框架、工作流编排等核心技术栈,并且提供了易用的界面和API,让技术和非技术人员都能参与到AI应用的开发过程中

内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
在科技快速演进的时代背景下,移动终端性能持续提升,用户对移动应用的功能需求日益增长。增强现实、虚拟现实、机器人导航、自动驾驶辅助、手势识别、物体检测与距离测量等前沿技术正成为研究与应用的热点。作为支撑这些技术的核心,双目视觉系统通过模仿人类双眼的成像机制,同步获取两路图像数据,并借助图像处理与立体匹配算法提取场景深度信息,进而生成点云并实现三维重建。这一技术体系对提高移动终端的智能化程度及优化人机交互体验具有关键作用。 双目视觉系统需对同步采集的两路视频流进行严格的时间同步与空间校正,确保图像在时空维度上精确对齐,这是后续深度计算与立体匹配的基础。立体匹配旨在建立两幅图像中对应特征点的关联,通常依赖复杂且高效的计算算法以满足实时处理的要求。点云生成则是将匹配后的特征点转换为三维空间坐标集合,以表征物体的立体结构;其质量直接取决于图像处理效率与匹配算法的精度。三维重建基于点云数据,运用计算机图形学方法构建物体或场景的三维模型,该技术在增强现实与虚拟现实等领域尤为重要,能够为用户创造高度沉浸的交互环境。 双目视觉技术已广泛应用于多个领域:在增强现实与虚拟现实中,它可提升场景的真实感与沉浸感;在机器人导航与自动驾驶辅助系统中,能实时感知环境并完成距离测量,为路径规划与决策提供依据;在手势识别与物体检测方面,可精准捕捉用户动作与物体位置,推动人机交互设计与智能识别系统的发展。此外,结合深度计算与点云技术,双目系统在精确距离测量方面展现出显著潜力,能为多样化的应用场景提供可靠数据支持。 综上所述,双目视觉技术在图像处理、深度计算、立体匹配、点云生成及三维重建等环节均扮演着不可或缺的角色。其应用跨越多个科技前沿领域,不仅推动了移动设备智能化的发展,也为丰富交互体验提供了坚实的技术基础。随着相关算法的持续优化与硬件性能的不断提升,未来双目视觉技术有望在各类智能系统中实现更广泛、更深层次的应用。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值