CSP-J模拟赛
题目名称 | 女王的棋局 | 排队 | 致命游戏 | 拔河 |
题目类型 | 传统型 | 传统型 | 传统型 | 传统型 |
目录 | queen | queue | game | tug |
可执行文件名 | queen | queue | game | tug |
输入文件名 | queen.in | queue.in | game.in | tug.in |
输出文件名 | queen.out | queue.out | game.out | tug.out |
每个测试点时限 | 1.0秒 | 1.0秒 | 1.0秒 | 1.0秒 |
内存限制 | 512MB | 512MB | 512MB | 512MB |
子任务数目 | 20 | 20 | 20 | 20 |
测试点是否等分 | 是 | 是 | 是 | 是 |
对于C++语言 | queen.cpp | queue.cpp | game.cpp | tug.cpp |
对于C++语言 | -O2 -lm |
   注意事项(请仔细阅读)
- 文件名(程序名和输入输出文件名)必须使用英文小写。
- C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
- 若无特殊说明,结果的比较方式为全文比较(过滤行末空格及文末回车)。
- 程序可使用的栈空间内存限制与题目的内存限制一致。
- 只提供Linux格式附加样例文件。
女王的棋局(queen)
【题目描述】
  小蓝最近迷上了国际象棋。但是在下棋的过程中,他总是不能正确地评估局面。于是他的好朋友小红告诉了他评估局面的方法。
  除王以外,国际象棋有士兵、城堡、骑士、牧师、王后五种棋子,分别用大写字母P(pawn)、R(rook)、N(knight)、B(bishop)、Q(queen)来表示。其中,士兵为1分,城堡为5分,骑士、牧师均为3分,王后为10分。棋手一般用场上棋子的得分总和来评估局面。现给出场上棋子的情况(以一个字符串表示),计算得分总和。
  注意:初始每位棋手有八个士兵,两个城堡,两个骑士,两个牧师,一个王后,一个国王(国王不计入得分计算)。小蓝有时候会作弊。若场上棋子数多于对应的初始数目,说明小蓝作弊了!这时,请不要输出得分,而输出”cheat”,不包含引号。
【输入格式】
从文件$queen.in$中读取数据。  一行一个仅包含大写字母的字符串$s$。
【输出格式】
输出到文件$queen.out$中。  输出一行一个数字表示得分总和,或当小蓝作弊了,输出”cheat”,不包含引号。
【输入样例1】
PPRRNBQPP【输出样例1】
31【输入样例2】
PPPPPNBBB【输出样例2】
cheat【数据范围】
  对于$60%$的测试点,小蓝不会作弊。
  对于$100%$的测试点,$1\le|s|\le 100$。
排队(queue)
【题目描述】
  小蓝和小红正和其他人(共n个人)排成一列准备做游戏。因为无聊,这n个人都随意报了一个数字。第i个人的数字为$a_i$。这时,裁判告诉他们:小蓝和小红所在位置的区间(包括小蓝和小红)的异或和为0!根据这些信息,你能找到小蓝和小红可能的位置吗?如果你确定不存在这样的两个位置,说明裁判在撒谎,输出”liar”(不含引号)。
  具体地说:你有一个n个数字组成的数列,请你找出所有异或和为0的区间,输出这样的区间的个数。如果不存在这样的区间,输出”liar”(不含引号)。
【输入格式】
  从文件$queue.in$中读取数据。
  第一行一个正整数$n$,代表人数。
  第二行$n$个正整数,第$i$个数$a_i$代表第$i$个人所报的数字。
【输出格式】
  输出到文件$queue.out$中。
  一行一个正整数$x$,代表小蓝和小红可能的位置个数。这个答案可能很大,请输出对998244353取模的结果。
【输入样例1】
  5
  2 1 4 5 8
【输出样例1】
  1
【输入样例2】
  3
  1 2 4
【输出样例2】
  liar
【数据范围】
  对于$30%$的测试点,$1\le n \le 300$。
  对于$60%$的测试点,$1\le n \le 1\times 10^4$。
  对于$100%$的测试点,$1\le n \le 1\times 10^7$。
  对于$100%$的测试点,$1\le a_i \le 1\times 10^5$。
致命游戏(game)
【题目描述】
  经过漫长的排队,终于轮到小蓝和小红玩游戏啦!这次,他们将操控虚拟小人,在棋盘上轮流放棋子。棋盘是一个$n*m$的矩形,左上角(1,1)格子放着一个炸弹,把棋子放在这个格子上将输掉游戏!当放下一个格子后,这个格子右下角的棋盘(包括棋子所在行、列)就将塌陷,不能再放棋子了!最开始轮到小蓝落子。他想知道是否存在一种先手必胜策略。
【输入格式】
  从文件$game.in$中读取数据。
  第一行一个正整数$T$,代表数据的组数。
  每组数据一行两个正整数$n,m$,代表棋盘的大小。
【输出格式】
  输出到文件$game.out$中。
  每组数据一行一个字符串,”YES”(不含引号)表示存在先手必胜策略,”NO”(不含引号)表示不存在先手必胜策略。
【输入样例1】
1  1 1
【输出样例1】
  NO
【输入样例2】
  2
  2 2
  1 2
【输出样例2】
  YES
  YES
【数据范围】
  对于$25%$的测试点,$1\le n\times m\le8$。
  对于另外$20%$的测试点,$1\le n\times m \le 20$。
  对于另外$25%$的测试点,$1\le n\times m \le 1\times 10^4$。
  对于$100%$的测试点,$1\le n,m \le 1\times 10^7$。
拔河(tug)
【题目描述】
  小红和小蓝玩完了游戏,在旁边观看2*n个人分成的两队拔河,每队都是n个人,每个人都有一个力量值$a_i,b_i$。
队伍的力量值为每个队员的力量值之和。
  可是,小红和小蓝发现,两个队伍的力量值差别实在是太大了!以致于这场比赛一点也不好看。现在他们要调整两队的人员,使得两队的力量值之和尽可能接近。
  同时,一个组内的n个人都和另一组的一个人是“仇家”,“仇家”不能同队。
对于第i对”仇家“,小红和小蓝可以花费金额$w_i$让这对仇家交换位置,即交换他们所在的队伍。
小红和小蓝还要省钱出去玩,所以他们希望用最少的钱调整两队人员,使得两队的力量值之差最小。
他们想知道,在两队体力值最接近的情况下,花费的最小金额是多少。你能帮帮他们吗?
【输入格式】
  从文件$tug.in$中读取数据。
  第一行一个正整数$n$。
  接下来$n$行,第$i$行3个非负整数$a_i,b_i,w_i$,表示第i对仇家的信息。其中$a_i$表示第i对仇家在$a$队的人的力量值,$b_i$表示第i对仇家在$b$队的人的力量值,$w_i$表示交换他们的位置所需要的金额。
【输出格式】
  输出到文件$tug.out$中。
  一行一个非负整数,在两队体力值最接近的情况下,花费的最小金额的数值。
【输入样例1】
  4
  6 1 1
  1 5 1
  1 3 1
  1 2 1
【输出样例1】
  1
【输入样例2】
  4
  6 1 2
  1 5 2
  1 3 3
  1 2 8
【输出样例2】
  7
【数据范围】
  对于$20%$的测试点,$1\le n\le 20$
  对于另外$10%$的测试点,$|a_i-b_i|<=1$
  对于另外$30%$的测试点,$w_i=1$
  对于$100%$的测试点,$1\le n \le 1000$
  对于$100%$的测试点,$\sum_{i=1}^{n}a_i\le 2\times 10^4 ,\sum_{i=1}^{n}b_i\le 2\times 10^4, 1\le w_i \le 1\times 10^5$