• VIJOS-P1078 松鼠吃果子


    洛谷 P2069 松鼠吃果子

    https://www.luogu.org/problemnew/show/P2069

    JDOJ 1256: VIJOS-P1078 松鼠吃果子

    https://neooj.com:8082/oldoj/problem.php?id=1256

    题目描述

    有N个一种松鼠喜欢吃的果子由下向上串排成一列,并标号1,2,...N。一只松鼠从最下果子开始向上跳,并且第i次跳可以一次跳过i*i*i除以5的余数+1个果子(=i*i*i%5+1),并把脚下的果子吃了,如果上面有果子,在重力作用下,都将向下掉下一格。如第1次跳从第一个果子上跳过1*1*1%5+1=2个果子,可跳到第3个果子上,并把第3个果子吃了;第2次从第4个果子上(落在原来第三个果子位置)跳过2*2*2%5+1=4个到第8个果子上,并把第8个吃了;如此...。

    当然,总有一次松鼠会跳出这串果子的最前面,设为每K次,它吃不到任何果子了。这时它回到最下面的果子上,重做它的第K次跳,以求吃到果子。如此,问它吃的第m只果子(即第M跳吃到的果子)的标号是什么?

    输入输出格式

    输入格式:

    一共两行,分别为N和m。(1<=m<=n<=200,并且满足能够跳到第m次)

    输出格式:

    一个数,即它吃的第m只果子的标号

    输入输出样例

    输入样例#1: 复制
    10 
    4
    
    输出样例#1: 复制
    9

    说明

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

    模拟题。

    如果用数组模拟的话,单点删除实在是过于费劲。

    然后想到了动态数组,但是模模糊糊地记忆动态数组不支持单点删除。

    但是打数组模拟累死了。

    看了题解加百度搜索之后,我发现了这么一个函数:a.erase();

    括号里加地址,可以删除那个点的元素,其他元素落下来。

    简直就是为了这个题而生的啊!!

    所以就有了代码,一开始WA了几次,需要一些细节处理。

    #include<cstdio>
    #include<vector>
    using namespace std;
    vector<int> a;
    int pos=1;
    int n,m;
    int main()
    { 
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            a.push_back(i);
        for(int i=1;i<=m;i++)
        {
            int t=i*i*i%5+1;
            pos+=t;
            if(pos>a.size())
                pos=t+1;
            if(i!=m)
                a.erase(a.begin()+pos-1);
        }
        printf("%d",a[pos-1]);
        return 0; 
    }

    首先理解好pos=t+1的意思,一开始的位置可不是0,是1,所以要把开始的1加上。

    a.begin是指向vector中的第一个元素,这个位置就是1,所以要在后面把pos多加的1减去。

    同理,最后输出也是如此。

  • 相关阅读:
    HTTP协议学习笔记
    linux对文件某列求和
    mongodb拆库分表脚本
    mongodb基础应用
    mongodb实现对某列求和SUM
    员工价值——如何体现自己价值,如何被自己的领导认可
    使用MySQLMTOP监控MySQL性能(二)
    使用MySQLMTOP监控MySQL性能(一)
    apache+tomcat实现session共享
    apache+tomcat负载均衡3种实现方式
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11220359.html
Copyright © 2020-2023  润新知