Atcoder ARC171 A - No Attacking

No Attacking(禁止攻击)

时间限制:2s 内存限制:1024MB

【原题地址】

所有图片源自Atcoder,题目译文源自脚本Atcoder Better!

点击此处跳转至原题

【问题描述】

在这里插入图片描述

【输入格式】

在这里插入图片描述
每个测试用例的格式如下:
在这里插入图片描述
在这里插入图片描述

【输出格式】

在这里插入图片描述

【样例1】

【样例输入1】

8
5 2 3
6 5 8
3 2 2
11 67 40
26 22 16
95 91 31
80 46 56
998 2 44353

【样例输出1】

Yes
No
No
No
Yes
No
Yes
Yes

【样例说明1】

在这里插入图片描述

【解题思路】

老汉使用到的是XXX的解题方式

本题是求能否将所有棋子都放置进棋盘。
我们可以把该题看作为,放置所有车后的余下面积是否允许放置所有的卒,车的最佳摆放为先在矩形中的偶数行放置,不够放置时再往奇数行放置,求出余下的的面积,判断卒能否全部放置其中。

代码注释有详细过程

【代码】

package ARC171_A_NoAttacking;

import java.io.*;

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
	static StreamTokenizer st = new StreamTokenizer(br);

	public static int readInt() throws IOException {
		st.nextToken();
		return (int) st.nval;
	}

	public static void main(String[] args) throws IOException {
		int T = readInt();
		while (T-- > 0) {
			int N = readInt();
			int A = readInt();
			int B = readInt();
			if (isPossible(N, A, B)) {
				pw.println("Yes");
			} else {
				pw.println("No");
			}
		}
		pw.flush();
		pw.close();
		br.close();
	}

	/**
	 * 判断是否符合题目条件
	 * 
	 * @param N
	 * @param A
	 * @param B
	 * @return true or false
	 */
	private static boolean isPossible(int N, int A, int B) {
		// 有效区域为放置所有车后,允许放置卒的最大数
		// 将N改为有效宽(有效区域宽只受车影响)
		N -= A;
		// 当有效宽度小于0时,必然不符合题目条件
		if (N < 0)
			return false;
		// 车偶数行放置,与之相邻余下奇数行的行数
		int a = Math.min(N, A + 1);
		// 放置完车与对应的卒后,剩下的行数,可放置卒的行数为剩下行数的一半
		int b = (N - a) / 2;
		// 求出有效区域的面积,判断是否能容纳所有卒
		B -= (a + b) * N;
		return B <= 0;
	}
}

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王老汉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值