• CF1455B Jumps 题解


    先假设全部执行第一种操作,然后把其中几个操作改为第二次操作。那么在第 $k$ 次执行的第二种操作就是走 $-k-1$ 。

    显然我们应该先用第一次操作走过 $x$ 后再改其中的几个操作往回走。设最开始先走 $p$ 次第一种操作,则 $p$ 应该为最小的满足 $frac{p(p+1)}{2}geq x$ 的 $p$ 。通过枚举可以找到这个 $p$ 。然后我们需要往回走 $frac{p(p+1)}{2}-x$ 步。

    通过把第一种操作改成第二种操作可以往回走的步数范围显然为 $[2,p+1]$ ,而显然有 $frac{p(p+1)}{2}-xin[0,p-1]$ 。可以发现,步数为 $[2,p-1]$ 的情况都可以通过把一个第一种操作改成第二种操作来实现,步数即为 $p$ ;而相差 $0$ 步显然不用走;只有相差 $1$ 步的情况需要多执行一次第二种操作,此时答案为 $p+1$ 。

    综上,先枚举到最小满足 $frac{p(p+1)}{2}geq x$ 的 $p$ ,然后判断 $frac{p(p+1)}{2}-x$ 是否为 $1$ ,若为 $1$ 则答案为 $p+1$ ,否则为 $p$ 。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int T,n,p;
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            for(p=1;p*(p+1)<n*2;p++);//暴力枚举
            printf("%d
    ",p+(p*(p+1)/2-n==1));//特判输出
        }
        return 0;
    }
  • 相关阅读:
    愤怒的小鸟(angry bird )
    1101模拟
    1029模拟题解
    1028题解
    图床
    数据结构
    博弈论
    差分
    前缀和
    快读和快写
  • 原文地址:https://www.cnblogs.com/TEoS/p/14074708.html
Copyright © 2020-2023  润新知