Atcoder ABC 400

· · 题解

400C

方法一:找规律

b的平方有1,4 , 9, 16, 25, 36, 49, 64, 81, 100

枚举2^a,只有a == 1a == 2的数字不会重复,其他情况都重复:

2^1 \times b^2: 2, 8, 18,32,50,72,98,128,162,200... $2^3 \times b^2: 8, 32,72...

所以我们要计算个数 只需要枚举2^12^2就可以了,直接输出答案即可。

注意要靠long double

方法二:

考虑枚举2^a,然后求有多少个满足条件的b.

400D

题意:

高桥打算去鱼店买鳗鱼。

他居住的城镇被划分为一个 HW 列的网格。每个单元格要么是道路,要么是墙壁。

我们将从上往下数第 i(1 \leq i \leq H)、从左往右数第 j(1 \leq j \leq W)的单元格记为单元格 (i, j)

关于每个单元格的信息由 H 个长度为 W 的字符串(S_1, S_2, \dots, S_H)给出。具体来说,如果S_i的第 j 个字符(1 \leq i \leq H)(1 \leq j \leq W).,则单元格 (i, j)是道路;如果是 #,则单元格 (i, j) 是墙壁。

他可以按任意顺序重复执行以下两种操作:

他从单元格 (A, B) 出发,想要前往位于单元格 (C, D) 的鱼店。

保证他的起始单元格和鱼店所在单元格都是道路。

求他到达鱼店所需的最少前踢次数。

方法一:双端队列代替普通队列:

方法二: 最短路算法

400E

题意:

一个正整数 N 被称为 “400 数”,当且仅当它同时满足以下两个条件:

处理 Q 次查询。每次查询会给你一个整数 A,请找出不超过 A 的最大 “400 数”。在本题的数据范围限制下,不超过 A 的 “400 数” 总是存在的。

思路:

埃氏筛法筛质数的时候,记录一下合数是多少个质数的倍数,如果这个合数是2个质数的倍数,那么这个合数一定是两个质数相乘得到的(可能多次相乘)。那么我们可以把这个数的平方放入vector,然后二分求答案;