P2069 松鼠吃果子

news2024/12/25 9:23:54

题目描述

 

输入输出样例

输入 #1

10 
4

输出 #1

9

说明/提示

注:吃掉的果子依次为 3,8,5(回到下面重做第 3 跳),9(回到下面重做第 4 跳)。


写着感觉好别扭

感觉和字符串没啥关系。。

然后洛谷那里的这个有问题:

第三跳吃的是编号5的果子


 

思路:

我的想法是定义一个int数组,初始化为1,表示有果子,0表示没果子。

循环m次,每次循环先计算每次跳多远,即代码中的jump;

然后判断从当前位置pos加上跳的距离jump是否跳得超过了n,超过了就回到初始位置,也就是pos=1;

最重要的来了,我们不能一下跳jump那么远,得一步一步跳,遇到被吃掉的果子,也就是int数组为0,那么这一步不算,重新跳。

代码1:(数组)

#include<iostream>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;

    int array[300];
    fill(array, array + n, 1);
    int cnt = 1, pos = 1, jump;
    while (m--) {
        jump = (cnt*cnt*cnt)%5 + 1;
        cnt++;
        if (pos + jump > n) {
            pos = 1;
        }
        int i;
        for (i = pos+1;1; i++) {//不能一下跳jump那么远,得一步一步跳
            if (array[i]) {
                jump--;
            }
            if (!jump) {
                break;
            }
        }
        array[i] = 0;
        pos = i + 1;
    }

    cout << pos-1 << endl;
    return 0;
}

代码2:(链表)

因为这道题涉及到了结点的删除,如果数据量大的话,使用数组会花费很多时间在数据的移动上,所以用的链表。

但是这道题不能用循环链表,因为如果松鼠会跳出这串果子的最前面,它吃不到任何果子时,要回到第一个位置,重新跳;如果是循环链表的话,会计算当前位置到末尾的位置,算到跳跃的步数里。

#include<iostream>
using namespace std;

struct List {
    int data;
    List* next;
};

int main()
{
    int n, m;
    cin >> n >> m;
    List * rear=NULL;

    List* head = (List*)malloc(sizeof(List));
    head->data = -1;
    head->next = NULL;

    for (int i = n; i >= 1; i--) {
        List* newNode = (List*)malloc(sizeof(List));
        newNode->data = i;
        newNode->next = NULL;

        newNode->next = head->next;
        head->next = newNode;
    }

    int jump, cnt;
    List* p = head->next, *pre = NULL;
    for (int i = 1; i <= m; i++) {
        jump = (i * i * i) % 5 + 1;
        cnt = jump;

        while (cnt--) {
            if (p->next == NULL) {
                p = head->next;
                cnt = jump;
                continue;
            }
            pre = p;
            p = p->next;
        }

        if (i != m) {
            pre->next = p->next;
            p = p->next;
        }

    }

    cout << p->data << endl;
    return 0;
}

代码3:(数组模拟链表)

用数组fa[]和数组son[]实现模拟双向链表

对于skip函数里面的for循环,它退出只有两种情况,s为0或者pos为0,当s为0时表示没跳到末尾,正常进行删除;如果pos为0,说明跳到了末尾,这时候需要返回开始的地方重新跳。

#include<iostream>
#define MAX 300
using namespace std;
int fa[MAX], son[MAX], n, m, pos = 1;

void skip(int s) {
    for (; s && pos; s--, pos = fa[pos]);
}

void del(int x) {
    pos = fa[x];
    fa[son[x]] = fa[x];
    son[fa[x]] = son[x];
    fa[x] = son[x] = -1;
}

int main()
{
    cin >> n >> m;
    fa[1] = 2;
    son[n] = n - 1;

    for (int i = 2; i < n; i++) {
        fa[i] = i + 1;
        son[i] = i - 1;
    }

    for (int i = 1; i <= m; i++) {
        int s = (i * i * i) % 5 + 1;
        skip(s);

        if (!pos) {
            pos = 1;
            skip(s);
        }
        if (i == m) {
            cout << pos << endl;
            return 0;
        }
        del(pos);
    }
    return 0;
}

代码4:(vector容器实现动态数组)

其实就是用数组,然后删除,移动,不过vector数组的erase方法帮我们实现了移动

#include<iostream>
#include<vector>
#define MAX 300
using namespace std;

int main()
{
    int m, n;
    cin >> n >> m;
    
    vector<int> v;
    for (int i = 1; i <= n; i++) {
        v.push_back(i);
    }

    int jump, pos = 1;
    for (int i = 1; i <= m; i++) {
        jump = (i * i * i) % 5 + 1;
        pos += jump;

        if (pos > v.size()) {
            pos = 1;
            pos += jump;
        }

        if (i == m) {
            cout << v[pos-1] << endl;
        }

        v.erase(v.begin()+pos-1);
    }

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口管理工具YApi怎么用?颜值高、易管理、超好用!

众多接口管理工具如雨后春笋搬冒出。让人欣慰的是&#xff0c;有许多优秀作品来自国内&#xff0c;包含YApi和rap。 看着中文的官网&#xff0c;熟悉的汉语&#xff0c;不禁让人暗爽。当然这也就带来另一个弊端&#xff0c;因为使用基数少&#xff0c;所以参考资料少。我们想学…

发送tcp/udp请求

本文章介绍下通过nc工具和iperf工具&#xff0c;发送tcp/udp请求一、nc工具&#xff08;netcat工具&#xff09;这个工具linux系统默认是自带的&#xff0c;以下是命令的常用参数1.1 发送tcp请求在服务端监听端口nc -l port客户端连接并发送请求nc -v host port在服务端收到了信…

自定义动态IRule进行路由转发

gateway的负载均衡以及feign服务之间的调用或者RestTemplate请求&#xff0c;都可以使用自定义IRule规则进行路由转发。 自定义IRule 固定IRule&#xff1a;将IRule的一个实现类注入到spring容器中 Configuration public class MyIRuleConfig { Beanpublic IRule myIRule() {…

力扣sql基础篇(五)

力扣sql基础篇(五) 1 页面推荐 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 输入示例 b 输出示例 1.2 示例sql语句 # Write your MySQL query statement below SELECT distinct page_id recommended_page FROM Likes WHERE (user_id in (SELECT user2_idFROM …

字符串查找、错误信息、字符分类函数

1、寻找子串strstr char* my_strstr(const char* str1, const char* str2) {assert(str1 && str2);const char* cp str1;const char* s1 str1;const char* s2 str2;while (*cp){s2 str2;s1 cp;while (*s1!\0 && *s2!\0 && * s1 *s2){s1;s2;}if (…

一步一步学爬虫(5)Ajax分析方法

一步一步学爬虫&#xff08;5&#xff09;Ajax分析方法5.2.1. 分析案例5.2.2. 过滤请求5.2.3. 总结5.2.1. 分析案例 这里还需要借助浏览器的开发者工具&#xff0c;下面以 Chrome 浏览器为例来介绍。 首先&#xff0c;用 Chrome 浏览器打开微博的链接 https://m.weibo.cn/u/283…

排查开机启动项

防止被控机器失联部分木马会添加开机启动项作为复活的手段 /etc/rc.local /etc/rc.local 是 /etc/rc.d/rc.local的软链接 [rootVM-4-11-centos etc]# ll rc.local lrwxrwxrwx 1 root root 13 Apr 6 2022 rc.local -> rc.d/rc.localrc.local的原始内容&#xff1a; #!/…

中文文案排版指北

格式规范千千万&#xff0c;内容创作 No.1 但是当下我们专注与文案排版。优秀的排版、正确使用标点符号能让阅读者赏心悦目&#xff0c;提升阅读体验。这篇文章将 GitHub 上的有关排版的规范摘抄部分供大家查阅&#xff0c;更多详情还请访问原文所在&#xff08;底部引用中的地…

APSIM练习:小麦苜蓿轮作

在本练习中&#xff0c;您将创建一个小麦苜蓿轮作&#xff0c;其中草料阶段持续数年。 基于“Rotation Sample.apsim”创建一个新的模拟。这是小麦鹰嘴豆轮作。在 Manager 文件夹中&#xff0c;Rotation Management 组件用于表示旋转&#xff0c;使用带有节点&#xff08;圆圈…

网站需要怎么优化比较好(网站优化有哪些技巧)

怎样让网站优化在短时间内看到效果&#xff1f; 在企业推广营销推广中&#xff0c;网站优化占据了很大一部分&#xff0c;对于企业推广营销有着决定性影响。如果想让您的企业在诸多品牌中脱颖而出&#xff0c;甚至在互联网中有强大的竞争力&#xff0c;你必须要做好网站优化&a…

基于微信小程序云开发的投票小程序源码,图文投票微信小程序源码

功能介绍 投票活动十分火&#xff0c;商家&#xff0c;企业&#xff0c;机构偶尔都会来一场投票活动评选&#xff0c;本小程序支持图文投票&#xff0c;简单方便、随时随地完成投票&#xff0c;可以方便设定投票模式&#xff08;按天按全程&#xff0c;投票数限定&#xff09;…

MySQL基础——DQL语句

select 聚合函数(字段列表) from 表名&#xff1b; Mysql的相关知识 好处 &#xff1a; 1.持久化数据到本地 2.可以实现结构化查询&#xff0c;方便管理 数据库主要分为: DB(数据库)&#xff0c;保存一系列有组织的数据容器。 DBMS(数据库管理系统)&#xff0c;用于对DB获得数…

[蓝桥杯 2017 省 B] k 倍区间(前缀和枚举/数论优化)

题目传送门 思路分析&#xff1a; 第一思路比较容易想到&#xff0c;就是枚举所有的前缀和&#xff0c;然后遍历它们计数满足题意的前缀和数量&#xff0c;最后输出即可&#xff0c;但是这里的数列最多达到了100000&#xff0c;在2层循环下&#xff0c;总的枚举次数就达到了O(…

webpack 的基本使用及配置

webpack 的基本使用配置 npm 镜像源创建列表隔行变色案例新建空白项目目录&#xff0c;初始化 package.json 配置文件通过 npm 安装 jquery新建 src 源代码目录index.htmlindex.js检查网页效果webpack 的安装webpack 的安装dependencies 与 devDependencies参数 -S 及 --save参…

规则引擎easy-rule快速入门及整合SpEL使用

规则引擎介绍 规则引擎解决的实际上就是判断条件分支过多的问题&#xff0c;举个例子&#xff0c;营销策略里&#xff0c;消费不足200&#xff0c;可用10元消费券&#xff0c;消费超过200元&#xff0c;可以享受9折优惠&#xff0c;超过400元和享受8折优惠。这里可以直接用if …

【houdini】带着uv进行模拟(冰激凌案例)

整个sop的路线图 前半部分&#xff1a;赋予材质并分离冰激凌球 一般模型是分部分的&#xff0c;比方说下面这个冰激凌的&#xff0c;分为5个部分。三个不同的冰激凌球和水和杯子。这些部分在houdini中被称为group。 用material节点一口气赋予5个group材质。 具体的材质的指…

【Linux】 gcc 、动态库和静态库,程序是如何链接的

文章目录前言一、gcc 是什么&#xff1f;二、使用步骤1.预编译2.编译3.汇编4.链接三、动静态库1.概念2.区别前言 在Linux环境下&#xff0c;除了学好编辑器 vim 的使用&#xff0c;还需要学会C语言的编译器 gcc 的功能&#xff0c;否则代码无法翻译成可执行程序。本文将介绍 gc…

怎样快速地迁移 MySQL 中的数据?

我们通常会遇到这样的一个场景&#xff0c;就是需要将一个数据库的数据迁移到一个性能更加强悍的数据库服务器上。这个时候需要我们做的就是快速迁移数据库的数据。那么&#xff0c;如何才能快速地迁移数据库中的数据呢&#xff1f;今天我们就来聊一聊这个话题。数据库的数据迁…

Spring Boot 日志详解

Spring Boot 日志一、日志有什么用二、日志怎么用三、自定义日志打印3.1 在程序中得到日志对象3.2 使用日志对象打印日志四、日志级别4.1 日志级别有什么用4.2 日志级别的分类与使用4.3 日志级别设置五、日志持久化5.1 配置文件名5.2 配置保存路径六、更简单的日志输出 -- lomb…

Go第 13 章 :2-客户信息关系系统

Go第 13 章 &#xff1a;2-客户信息关系系统 13.1 项目需求分析 模拟实现基于文本界面的《客户信息管理软件》。该软件能够实现对客户对象的插入、修改和删除&#xff08;用切片实现&#xff09;&#xff0c;并能够打印客户明细表 13.2 项目的界面设计 主菜单界面 添加客户…