B. Nastya Is Playing Computer Games(思维)

题目链接:

http://codeforces.com/problemset/problem/1136/B

分析:

这个题思路还是比较明确的但是有几个小坑。
基本思路, 我们通过推演几次我们就会发现无论是哪种情况。每拿到一个硬币一定会经过三次的移动。 多推演几次就会知道。
那么我们就可以用这个来找到k左边的硬币全部拿取需要多少步,然后在从1号位置回到k号位置要多少步。最后把k右边的硬币全部拿取又要多少步。全部加起来就可以得到正确答案了。

但是我们在这里要考虑是先拿取k左边的好还是k右边的好。 这里有一个区别。

因为你选择了一边就决定了从那一边回到k号位置需要多少步。

然后,还要考虑当k=1和当k=n时候的特殊情况。

AC代码:

#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    if(k==1)
    {
        printf("%d\n",n*3);
        return 0;
    }
    if(k==n)
    {
        printf("%d\n",n*3);
        return 0;
    }
    int cnt=k*3;
        cnt+=(k-1)+(n-k)*3;
    int minx=(n-k+1)*3;
    minx+=(n-k)+(k-1)*3;
   // printf("cnt=%d minx=%d\n",cnt,minx);
    printf("%d\n",min(cnt,minx));
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值