problem


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$

&emsp;&emsp;对于另外$10%$的测试点,$|a_i-b_i|<=1$

&emsp;&emsp;对于另外$30%$的测试点,$w_i=1$

&emsp;&emsp;对于$100%$的测试点,$1\le n \le 1000$

&emsp;&emsp;对于$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$


文章作者: Tarjan01
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Tarjan01 !
  目录