T1:五子棋
【题目描述】
五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。
五子连珠是在 横线,纵线,斜线,反斜线 四个方向上形成五子及以上的连线,当出现多于五子的连珠时,也只记为一次五子连珠。
五子连珠总数. 等于棋局中的所有方向上的五子连珠连线的数量之和。我们想知道,给定一个长宽皆为 n 的棋局,白棋落在哪些点可以增加白棋五子连珠总数?对增加白棋五子连珠总数的举例说明 (A 点为我们选择的落点):
1 wwwwAbbbb
落白棋之前未形成五子连珠,落入白棋之后,五子连珠总数加一,满足要求。
2 wwwwwAbbbb
落白棋之前已经形成五子连珠,落白棋之后,五子连珠总数不变,不满足要求。
3 wwwwwAwwwww
落白棋之前五子连珠总数为二,落入白棋之后,两边连成一线,五子连珠总数减
一,不满足要求。
4
*w***w*****
**w**w*****
***w*w*****
****ww*****
wwwwwAwwwww
落白棋之前五子连珠总数为二。落入白棋之后,两边连成一线,斜向和纵向形成新的五子连珠,总数为三。五子连珠总数加一,这个点满足要求。
【输入格式】
从文件 wuzi.in 中读入数据。输入为第一行为一个数字 n(n ≤ 40),表示棋盘大小。接下来的 n 行,每行为 n 个字符,可能有三种字符,*表示无棋子,b表示黑棋,
w表示白棋。输入棋局中可能已经有五子连珠的情况,我们需要计算能增加白棋五子连珠总数的白棋落点。
【输出格式】
输出到文件 wuzi.out 中。输出为 k 行,包括 k 个满足要求的落点,k 个点按照从左至右,从上至下的顺序输出,即先按行排序,再按列排序输出。
每行为一个点坐标 $(x,y)$,分别表示列坐标,行坐标,以空格分隔,坐标序号从0开始,棋盘左上角为原点。
*a***
*****
*****
*****
***b*
图中 a 点的坐标为 $(1,0)$,b 点的坐标为 $(3,4)$。
【样例输入】
8
****b*bb
*****b*b
bb*bbbw*
w*wbwwww
bwwbwwbw
ww**wbbw
*bww***w
***bwb*b
【样例输出】
7 2
2 5
3 5
4 6
2 7
【子任务】
共20组数据
1,2 没有满足要求的点
3,4,5,6,7,8 只需要计算横纵方向, 棋局中不存在旧的五子连珠
9,10,11,12,13,14 需要计算所有方向, 棋局中不存在旧的五子连珠
15,16,17,18,19,20 盘面上存在旧的五子连珠
只考虑中间隔一个点的连棋,所以直接爆搜,判各个方向的情况。
T2:Equation
【题目描述】
给定一个等式,其格式为 $p ? q = r$,其中 $1≤ p,q,r < 10^9$,算符 ? 可以是 +、- 或 *(表示乘法)。
$p$,$q$ 和 $r$ 中的某些数字被替换成了大写字母,例如 $A09+ C0B = 6AC$。你的任务是找出所有大写字母代表的数字,使得等式成立。
你需要遵循下列规则:
1. 相同的字母替换成相同的数字,不同的字母替换成不同的数字。
2. $p$、$q$ 和 $r$ 不能以$0$开头。称两个方案不同,如果存在一个字母被替换成了不同的数字。考虑到方案数可能很多,你只需要输出合法方案的数量。注意如果没有方法使得等式成立,你应该输出$0$。
【输入格式】
从文件 equation.in 中读入数据。
输入只有一行,表示需要处理的等式。保证最多只有9个不同的字母,等式中不会出现空格。
【输出格式】
输出到文件 equation.out 中。
输出一个整数,表示方案的数量。
【样例1输入】
A09+C0B=6AC
【样例1输出】
1
【样例1解释】
唯一合法的方案是109+506=615。
【样例2输入】
P*Q=P
【样例2输出】
8
【样例3输入】
CANADA-MAR8=CCC
【样例3输出】
0
【子任务】
总共有 10 个测试点。
对于测试点1∼3,等式中最多有3个不同的字母。
对于测试点1、2、4、7和8,? 只可能是 + 或 -。
对于测试点1、4、5和6,每个字母只会出现一次。
原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/9742254.html