喜水青蛙

简介: 总是喜欢在水里嬉戏的青蛙,某天要过河拜访一位朋友。已知河道中长满了带刺的不知名生物,能通过的路只有一条直线,长度为L。直线上随机分布着m块石头。青蛙的最小跳跃距离是s,最大跳跃距离是t。青蛙想要尽可能的少踩石头,那么它通过河道最少会踩到多少石头?

喜水青蛙

题目描述

总是喜欢在水里嬉戏的青蛙,某天要过河拜访一位朋友。
已知河道中长满了带刺的不知名生物,能通过的路只有一条直线,长度为L。
直线上随机分布着m块石头。青蛙的最小跳跃距离是s,最大跳跃距离是t。
青蛙想要尽可能的少踩石头,那么它通过河道最少会踩到多少石头?

输入描述:

多组数据输入,其中每组数据:
第一行输入1个整数L(1<=L<=1e9)。
第二行输入3个整数:s、t、m(1<=s<=t<=10,1<=m<=100)。
第三行输入m个不同的整数,表示m个石子在数轴上的分布位置。
每行所有相邻整数用空格隔开。

输出描述:

输出青蛙过河最少会踩到的石子数量,
每组输入数据对应的输出结果单独成行。

输入样例:

10
2 3 5
2 3 5 6 7

输出样例:

2

代码

#include<stdio.h>

int min(int x, int y)
{
    return x<y?x:y;
}

int gcd(int x,int y){
    if(y==0)return x;
    return gcd(y,x%y);
}

int lcm(int x, int y){
    return x*y/gcd(x,y);
}

void quicksort(int *a,int left,int right)
{
    if(left>right)
    {
        return ;
    }
    int i=left;
    int j=right;
    int key=a[left];
    while(i!=j)
    {
        while(a[j]>=a[left]&&i<j)
        {
            j--;
        }
        while(a[i]<=a[left]&&i<j)
        {
            i++;
        }
        int s;
        s=a[i];
        a[i]=a[j];
        a[j]=s;
    }
    a[left]=a[i];
    a[i]=key;
    quicksort(a,left,i-1);
    quicksort(a,i+1,right);
}

int main(){
    int l,s,t,m;
    int a[101],b[101],f[20000],flag[20000];
    scanf("%d %d %d %d",&l,&s,&t,&m);
    int k=lcm(s,t);
    for(int i=1;i<=m;i++)scanf("%d",&a[i]);
    if(s==t){
        int sum=0;
        for(int i=1;i<=m;i++)if(a[i]%s==0)sum++;
        printf("%d",sum);
        return 0;
    }
    a[m+1]=l;
    quicksort(a,0,m+1);
    for(int i=1;i<=m+1;i++){
        if(a[i]-a[i-1]>=2*k)b[i]=(a[i]-a[i-1])%k+k;
        else b[i]=a[i]-a[i-1];
    }
    for(int i=1;i<=m+1;i++){
        a[i]=a[i-1]+b[i];
        flag[a[i]]=1;
    }
    flag[a[m+1]]=0;
    for(int i=1;i<=a[m+1]+t+1;i++){
        f[i]=0x3fffffff;
        for(int j=s;j<=min(i,t);j++){
            f[i]=min(f[i],f[i-j]+flag[i]);
        }
    }
    printf("%d",f[a[m+1]+t+1]);
    return 0;
}
相关文章
|
安全 数据可视化 测试技术
「译文」CMDB 最佳实践技术指南 -4-CMDB 业务服务映射
「译文」CMDB 最佳实践技术指南 -4-CMDB 业务服务映射
|
30天前
|
人工智能 监控 算法
构建时序感知的智能RAG系统:让AI自动处理动态数据并实时更新知识库
本文系统构建了一个基于时序管理的智能体架构,旨在应对动态知识库(如财务报告、技术文档)在问答任务中的演进与不确定性。通过六层设计(语义分块、原子事实提取、实体解析、时序失效处理、知识图构建、优化知识库),实现了从原始文档到结构化、时间感知知识库的转化。该架构支持RAG和多智能体系统,提升了推理逻辑性与准确性,并通过LangGraph实现自动化工作流,强化了对持续更新信息的处理能力。
183 4
|
1月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
阿里云 PAI-Model Gallery 已同步接入 gpt-oss 系列模型,提供企业级部署方案。
|
弹性计算 Windows
使用阿里云服务器登录雾锁王国后,游戏创建失败怎么办
使用阿里云服务器登录雾锁王国后,游戏创建失败时,请更新游戏并重启游戏进程。
647 3
|
存储 安全 JavaScript
服务器验证Cookie
【8月更文挑战第21天】
336 1
|
存储 设计模式 前端开发
软件架构设计的原则与模式:构建高质量系统的基石
【7月更文挑战第26天】软件架构设计是构建高质量软件系统的关键。遵循高内聚、低耦合、单一职责等设计原则,并灵活运用分层架构、微服务架构、客户端-服务器架构等设计模式,可以帮助我们设计出更加灵活、可扩展、可维护的软件系统。作为开发者,我们应该不断学习和实践这些原则与模式,以提升自己的架构设计能力,为团队和用户提供更加优秀的软件产品。
|
机器学习/深度学习 存储 算法
特征向量(Eigenvector)
特征向量(Eigenvector)是在线性代数中与矩阵相对应的非零向量,其在矩阵乘法下只发生伸缩变化而不改变方向。特征向量与特征值(Eigenvalue)是成对出现的,特征值表示特征向量的伸缩因子。
607 1
|
小程序 前端开发 JavaScript
微搭低代码中的用户登录及注册
微搭低代码中的用户登录及注册
微搭低代码中的用户登录及注册
|
机器学习/深度学习 人工智能 算法框架/工具
AI在医疗诊断中的应用:图像分析和疾病预测
随着人工智能(AI)的快速发展,它在医疗领域的应用越来越受到关注。其中,图像分析和疾病预测是AI在医疗诊断中最具潜力的领域之一。本文将探讨如何使用AI技术来分析医学图像并预测疾病的发展,为医生提供更准确和及时的诊断结果。
883 0
|
Cloud Native Go 数据安全/隐私保护
自定义Docker镜像推送到Docker Hub实战
自定义Docker镜像推送到Docker Hub实战