2022“杭电杯”中国大学生算法设计超级联赛(10)题解

        1009 Painting Game

题意:Alice 和 Bob 给一串格子涂上黑色,轮流涂,相邻的两个格子不能都为黑色

Alice 希望黑色的格子尽可能少

Bob 希望黑色的格子尽可能多

给出格子的数量和先手的人,求出最终黑色格子的数量。

思路:

假如Bob先手,并且n很大。第一手Bob应该去涂第三个,因为这样无论如何第一个最终都会被涂成黑色。

轮到Alice,Alice应该会去涂第六个,每次为Bob涂的位置+3,这样中间的两个都涂不到。

又轮到Bob的时候,Bob应该会涂第十个,每次为Alice涂的位置+4,这样中间三个的最中间那个只能被涂成黑色。

然后枚举出n较小时的情况。可以发现解是112233344556667788999这样的分布,找规律就可以得出Bob先手时的解fB(n)。

对于Alice先手,Alice会首选涂在第2格,容易发现,两个人分别先手的情况如下:

00100200010020001 

        0200010020001  (1代表Bob,2代表Alice)

也即fA=fB(n+4)-2.

AC代码:

#include <stdio.h>
int fA(int n);
int fB(int n);
int main()
{
	int t;
	scanf("%d",&t);
	for(int i=0;i<t;i++){
   		int n;
   		char str[6];
   		scanf("%d %s",&n,str);
   		if(str[0]=='A'){
   			printf("%d\n",fA(n));
		}
		else{
			printf("%d\n",fB(n));
		}
	}
}

int fA(int n){
	if(n==1) return 1;
	else if(n==2) return 1;
	else if(n==3) return 1;
			
	return fB(n+4)-2;
}
int fB(int n){
	if(n==1) return 1;
	if(n==2) return 1;
	if(n==3) return 2;
	if(n==4) return 2;
 	int ans=0;
 	int m=(n-5)%7;
 	if(m<3){
 		ans=(n-5)/7*3+3;
	 }
	 else if(m<5){
	 	ans=(n-5)/7*3+4;
	 }
	 else ans=(n-5)/7*3+5;
	 return ans;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值