列表

详情


NC17865. 炸弹游戏

描述

Alice和Bob相约一起玩一个炸弹游戏。

游戏开始时,Alice手上拿着一个定时炸弹,炸弹有个倒计时t。炸弹在t=0时刻会爆炸,此时手上拿着炸弹的人就输了。为了增加游戏乐趣,他们约定每个人拿到炸弹后可以选择将炸弹的时间调快d秒(d ∈ [a,b]),或者不调。每次交换炸弹会消耗1秒(假设调节炸弹时间不需要消耗时间)。

问题来了,如果双方都足够聪明,谁会赢呢?

输入描述

第一行有三个整数t,a,b,分别表示炸弹初始时刻的倒计时,可调节时间的范围。(0 ≤ t ≤ 105,1 ≤ a ≤ b ≤ 10)

输出描述

若Alice赢则输出"Alice",若Bob赢则输出"Bob"。

示例1

输入:

6 3 4

输出:

Alice

说明:

Alice只需要将炸弹调快3秒后再给Bob,Bob就会拿到一个2秒后爆炸的炸弹。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3 解法, 执行用时: 180ms, 内存消耗: 5524K, 提交时间: 2022-10-26 20:36:52

t,a,b=list(map(int,input().split()))
ans=[0 for i in range(100010)]
for i in range(1,t+1):
    if ans[i-1]==0:
        ans[i]=1
    for j in range(i-b-1,i-a):
        if j>=0 and ans[j]==0:
            ans[i]=1
            break
if ans[t]==1:
    print("Alice")
else:
    print("Bob")
    

C++14(g++5.4) 解法, 执行用时: 7ms, 内存消耗: 792K, 提交时间: 2020-09-03 10:15:05

#include<bits/stdc++.h>
using namespace std;
int t,a,b,f[100005];
int main()
{
	cin>>t>>a>>b;
	
	for(int i=1;i<=t;i++)
	{
		if(!f[i-1])f[i]=1;
		for(int j=a+1;j<=b+1;j++)
		if(i>=j&&!f[i-j])
		f[i]=1;
		
	}
	if(f[t])cout<<"Alice";
	else
	cout<<"Bob";
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 7ms, 内存消耗: 752K, 提交时间: 2020-01-28 17:51:01

#include<bits/stdc++.h>
#define rep(i,s,e) for(int i=s; i<e; ++i)
int t,a,b,q[100005];
int main(){
	std::cin>>t>>a>>b; rep(i,1,t+1){
		if(!q[i-1]) q[i]=1;
		rep(j,a+1,b+2) if(i>=j&&!q[i-j]) q[i]=1;
	} puts(q[t]?"Alice":"Bob");
}

上一题