B. Nastya Is Playing Computer Games---(水题模拟)Codeforces Round #546 (Div. 2)

Nastya Is Playing Computer Games

题目链接http://codeforces.com/contest/1136/problem/B
time limit per test:1 second

memory limit per test:256 megabytes

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


题目大意:给你n个盖了盖子的井和你当前的位置,井上面压着石头,井里有硬币,你需要捡完所有的硬币才能通关。问你最少的移动步数,移动规则如下:
1.将石头扔到任意一个井上。2.移动到下一个位置。3.进入井中捡硬币,并盖上盖子(这一步不会花费步数)。
emmm。。。这个读题有点有点迷,然后看了一下仔细规则——盖上井盖不用移动,而不是进入井不用移动。。。然后稍微想一想就A了。。。
对于移动,我们只有两种走法,1.往左走,走完后往右走直到底。2.往右走,走完后往左走直到底。如果不这么走,我们很容易知道他不会获得最小步数。接下来我们会发现,想要步数最小,我们应该第一步将石头放到第二步的,第二步花费多一点的步数将所有的石头放到第一步的位置,接下来的每一步就只需石头扔到已经取完的井上了。所以我们除了第一步用了2t,第二步用了4t,接下来除了回头走没有硬币的地方是1t的其余都是3t了。
最后我们将两种方案比较一下就行了。
以下是详细代码:

#include <cstdio>
int main()
{
	int n,k;
	scanf ("%d%d",&n,&k);
	int ans=2+4;
	for (int i=k-2; i>=1; i--){
		ans+=3;
	}
	if (k<n) {
		ans+=k-1;
		for (int i=k+1; i<=n; i++){
			ans+=3;
		}
	}
	int sum=9999999;
	sum=(sum>ans)?ans:sum;
	ans=2+4;
	for (int i=k+2; i<=n; i++){
		ans+=3;
	}
	if (k>1){
		ans+=n-k;
		for (int i=k-1; i>=1; i--){
			ans+=3;
		}
	}
	sum=(sum>ans)?ans:sum;
	printf ("%d\n",sum);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值