闲聊群

19 条评论

  • @ 2024-10-26 21:28:12

    [CSP-J 2024] 地图探险(民间数据)

    题目描述

    小 A 打算前往一片丛林去探险。丛林的地理环境十分复杂,为了防止迷路,他先派遣了一个机器人前去探路。

    丛林的地图可以用一个 nnmm 列的字符表来表示。我们将第 ii 行第 jj 列的位置的坐标记作 (i,j)(1in,1jm)(i, j)(1 \leq i \leq n, 1 \leq j \leq m)。如果这个位置的字符为 x\tt x,即代表这个位置上有障碍,不可通过。反之,若这个位置的字符为 .\tt.,即代表这个位置是一片空地,可以通过。

    这个机器人的状态由位置和朝向两部分组成。其中位置由坐标 (x,y)(1xn,1ym)(x, y)(1 \leq x \leq n, 1 \leq y \leq m) 刻画,它表示机器人处在地图上第 xx 行第 yy 列的位置。而朝向用一个 030 \sim 3 的 整数 dd 表示,其中 d=0d = 0 代表向东,d=1d = 1 代表向南,d=2d = 2 代表向西,d=3d = 3 代表向北。

    初始时,机器人的位置为 (x0,y0)(x_0, y_0),朝向为 d0d_0保证初始时机器人所在的位置为空地。接下来机器人将要进行 kk 次操作。每一步,机器人将按照如下的模式操作:

    1. 假设机器人当前处在的位置为 (x,y)(x, y),朝向为 dd。则它的方向上的下一步的位置 (x,y)(x^′, y^′) 定义如下:若 d=0d = 0,则令 (x,y)=(x,y+1)(x^′, y^′) = (x, y + 1),若 d=1d = 1,则令 (x,y)=(x+1,y)(x^′, y^′) = (x + 1, y),若 d=2d = 2,则令 (x,y)=(x,y1)(x^′, y^′) = (x, y - 1),若 d=3d = 3,则令 (x,y)=(x1,y)(x^′, y^′) = (x − 1, y)

    2. 接下来,机器人判断它下一步的位置是否在地图内,且是否为空地。具体地说,它判断 (x,y)(x^′, y^′) 是否满足 1xn,1ym1 \leq x^′ \leq n, 1 \leq y^′ \leq m,且 (x,y)(x^′, y^′) 位置上是空地。如果条件成立,则机器人会向前走一步。它新的位置变为 (x,y)(x^′, y^′),且朝向不变。如果条件不成立,则它会执行“向右转”操作。也就是说,令 d=(d+1)mod4d^′ = (d + 1) \bmod 4(即 d+1d + 1 除以 44 的余数),且它所处的位置保持不变,但朝向由 dd 变为 dd^′

    小 A 想要知道,在机器人执行完 kk 步操作之后,地图上所有被机器人经过的位置(包括起始位置)有几个。

    输入格式

    本题有多组测试数据。

    输入的第一行包含一个正整数 TT,表示数据组数。

    接下来包含 TT 组数据,每组数据的格式如下:

    第一行包含三个正整数 n,m,kn, m, k。其中 n,mn, m 表示地图的行数和列数,kk 表示机器人执行操作的次数。

    第二行包含两个正整数 x0,y0x_0, y_0 和一个非负整数 d0d_0

    接下来 nn 行,每行包含一个长度为 mm 的字符串。保证字符串中只包含 x\tt{x}.\tt{.} 两个字符。其中,第 xx 行的字符串的第 yy 个字符代表的位置为 (x,y)(x, y)。这个位置是 x\tt{x} 即代表它是障碍,否则代表它是空地。数据保证机器人初始时所在的位置为空地。

    输出格式

    对于每组数据:输出一行包含一个正整数,表示地图上所有被机器人经过的位置(包括起始位置)的个数。

    样例 #1

    样例输入 #1

    2
    1 5 4
    1 1 2
    ....x
    5 5 20
    1 1 0
    .....
    .xxx.
    .x.x.
    ..xx.
    x....
    

    样例输出 #1

    3
    13
    

    提示

    【样例 1 解释】

    该样例包含两组数据。对第一组数据,机器人的状态以如下方式变化:

    1. 初始时,机器人位于位置 (1,1)(1, 1),方向朝西(用数字 22 代表)。
    2. 第一步,机器人发现它下一步的位置 (1,0)(1, 0) 不在地图内,因此,它会执行“向右转”操作。此时,它的位置仍然为 (1,1)(1, 1),但方向朝北(用数字 33 代表)。
    3. 第二步,机器人发现它下一步的位置 (0,1)(0, 1) 不在地图内,因此,它仍然会执行“向右转”操作。此时,它的位置仍然为 (1,1)(1, 1),但方向朝东(用数字 00 代表)。
    4. 第三步,机器人发现它下一步的位置 (1,2)(1, 2) 在地图内,且为空地。因此,它会向东走一步。此时,它的位置变为 (1,2)(1, 2),方向仍然朝东。
    5. 第四步,机器人发现它下一步的位置 (1,3)(1, 3) 在地图内,且为空地。因此,它会向东走一步。此时,它的位置变为 (1,3)(1, 3),方向仍然朝东。

    因此,四步之后,机器人经过的位置有三个,分别为 (1,1),(1,2),(1,3)(1, 1),(1, 2),(1, 3)

    对第二组数据,机器人依次执行的操作指令为:向东走到 (1,2)(1, 2),向东走到 (1,3)(1, 3),向东走到 (1,4)(1, 4),向东走到 (1,5)(1, 5),向右转,向南走到 (2,5)(2, 5),向南走到 (3,5)(3, 5),向南走到 (4,5)(4, 5),向南走到 (5,5)(5, 5),向右转,向西走到 (5,4)(5, 4),向西走到 (5,3)(5, 3),向西走到 (5,2)(5, 2),向右转,向北走到 (4,2)(4, 2),向右转,向右转,向南走到 (5,2)(5, 2),向右转,向右转。

    【样例 2】

    见选手目录下的 explore/explore2.in 与 explore/explore2.ans。

    该样例满足第 343\sim 4 个测试点的限制条件。

    【样例 3】

    见选手目录下的 explore/explore3.in 与 explore/explore3.ans。

    该样例满足第 55 个测试点的限制条件。

    【样例 4】

    见选手目录下的 explore/explore4.in 与 explore/explore4.ans。

    该样例满足第 66 个测试点的限制条件。

    【样例 5】

    见选手目录下的 explore/explore5.in 与 explore/explore5.ans。

    该样例满足第 8108 \sim 10 个测试点的限制条件。

    【数据范围】

    对于所有测试数据,保证:1T5,1n,m1031 \leq T \leq 5, 1 \leq n, m \leq 10^31k1061 \leq k \leq 10^61x0n1 \leq x_0 \leq n1y0m1 \leq y_0 \leq m0d030 \leq d_0 \leq 3,且机器人的起始位置为空地。

    测试点编号 nn mm kk 特殊性质
    11 =1=1 2\leq 2 =1=1
    22
    33 102\leq 10^2
    44
    55 =1=1 103\leq 10^3 2×103\leq 2\times 10^3 地图上所有位置均为空地
    66
    77 103\leq 10^3 106\leq 10^6 地图上所有位置均为空地
    88
    99
    1010
    • @ 2024-10-26 20:59:49

      [CSP-J 2024] 扑克牌

      题目描述

      小 P 从同学小 Q 那儿借来一副 nn 张牌的扑克牌。

      本题中我们不考虑大小王,此时每张牌具有两个属性:花色和点数。花色共有 44 种:方片、草花、红桃和黑桃。点数共有 1313 种,从小到大分别为 A23456789TJQK\tt{A 2 3 4 5 6 7 8 9 T J Q K}。注意:点数 1010 在本题中记为 T\tt T

      我们称一副扑克牌是完整的,当且仅当对于每一种花色和每一种点数,都恰好有一张牌具有对应的花色和点数。由此,一副完整的扑克牌恰好有 4×13=524 \times 13 = 52 张牌。以下图片展示了一副完整的扑克牌里所有的 52 张牌。

      小 P 借来的牌可能不是完整的,为此小 P 准备再向同学小 S 借若干张牌。可以认为小 S 每种牌都有无限张,因此小 P 可以任意选择借来的牌。小 P 想知道他至少得向小 S 借多少张牌,才能让从小 S 和小 Q 借来的牌中,可以选出 5252 张牌构成一副完整的扑克牌。

      为了方便你的输入,我们使用字符 D\tt D 代表方片,字符 C\tt C 代表草花,字符 H\tt H 代表红桃,字符 S\tt S 代表黑桃,这样每张牌可以通过一个长度为 22 的字符串表示,其中第一个字符表示这张牌的花色,第二个字符表示这张牌的点数,例如 CA\tt{CA} 表示草花 A\tt AST\tt{ST} 表示黑桃 T\tt T(黑桃 10)。

      输入格式

      输入的第一行包含一个整数 nn 表示牌数。

      接下来 nn 行:

      每行包含一个长度为 22 的字符串描述一张牌,其中第一个字符描述其花色,第二个字符描述其点数。

      输出格式

      输出一行一个整数,表示最少还需要向小 S 借几张牌才能凑成一副完整的扑克牌。

      样例 #1

      样例输入 #1

      1
      SA
      

      样例输出 #1

      51
      

      样例 #2

      样例输入 #2

      4
      DQ
      H3
      DQ
      DT
      

      样例输出 #2

      49
      

      提示

      【样例 1 解释】

      这一副牌中包含一张黑桃 A\tt A,小 P 还需要借除了黑桃 A\tt A 以外的 51 张牌以构成一副完整的扑克牌。

      【样例 2 解释】

      这一副牌中包含两张方片 Q\tt Q、一张方片 T\tt T(方片 10)以及一张红桃 3,小 P 还需要借除了红桃 3、方片 T\tt T 和方片 Q\tt Q 以外的 4949 张牌。

      【样例 3 解释】

      见选手目录下的 poker/poker3.in 与 poker/poker3.ans。

      这一副扑克牌是完整的,故不需要再借任何牌。

      该样例满足所有牌按照点数从小到大依次输入,点数相同时按照方片、草花、红桃、黑桃的顺序依次输入。

      【数据范围】

      对于所有测试数据,保证:1n521 \leq n \leq 52,输入的 nn 个字符串每个都代表一张合法的扑克牌,即字符串长度为 22,且第一个字符为 DCHS\tt{D C H S} 中的某个字符,第二个字符为 A23456789TJQK\tt{A 2 3 4 5 6 7 8 9 T J Q K} 中的某个字符。

      测试点编号 nn \leq 特殊性质
      11 A
      242\sim 4 5252
      575\sim 7 B
      8108\sim 10

      特殊性质 A:保证输入的 nn 张牌两两不同。

      特殊性质 B:保证所有牌按照点数从小到大依次输入,点数相同时按照方片、草花、红桃、黑桃的顺序依次输入。

      • @ 2024-10-26 20:54:16

        完了,我同桌也是(bushi)

        • @ 2024-10-26 20:49:55

          @

        • @ 2024-3-24 16:17:33

          image

          • @ 2024-3-24 16:01:16

            image

            • @ 2024-3-15 20:01:19

              image

              • @ 2024-3-15 19:05:54

                image

                • @ 2024-3-10 15:18:59

                  image

                  • @ 2024-2-17 22:40:39

                    大佬求带!!!image

                    p2133. 刘谦的魔术时光 有人会做吗?卡在步骤二了! image

                    • @ 2024-1-1 15:41:11

                      🎉️2024年了,大家新年快乐!!!

                      image

                      新的一年,祝大家一帆风顺、两人同心、三羊开泰、四喜临门、五谷丰登、六六大顺、七星高照、八方进宝、久久登科、十全十美😄 🎉️

                      • @ 2024-1-7 14:01:53

                        🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹🥹

                    • @ 2023-11-18 23:03:34

                      新改的标签怎么样?

                      • @ 2023-11-11 21:47:45

                        注释的作用

                        代码注释本意是用作解释说明,告诉其他人,我这行代码是什么意思,我为啥这么写。

                        由于代码注释不会被执行,因此可以妙用注释来“调试”程序。

                        比如,我有一行代码不知道该怎么写,不知道变量是加1还是减1,那么可以写出这两行,并注释掉其中一行。

                        int n = 1;
                        // n = n + 1;
                        n = n - 1;
                        

                        这时候,注释就像一个开关,打开哪个开关就运行哪个代码,很方便。

                        另外,在多数的IDE中,Ctrl + / 就是快速注释这行的快捷键。光标在哪行就注释哪行。

                        • @ 2023-11-1 14:43:44

                          谨防电信诈骗

                          image

                          • @ 2023-10-29 11:19:31
                            import turtle as t
                            
                            pen1 = t.Turtle()  # 左侧红
                            # 250,10,135
                            # 253,0,85
                            # 251,77,137
                            pen2 = t.Turtle()  # 中间黄
                            # 253,213,83
                            # 253,180,11
                            # 253,224,85
                            pen3 = t.Turtle()  # 右侧蓝
                            # 9,74,255
                            # 20,158,234
                            # 54,93,185
                            # 8,79,190
                            # 20,158,234
                            # 9,74,255
                            # 15,0,252
                            
                            pens = [pen1, pen2, pen3]
                            
                            t.colormode(255)
                            for p in pens:
                                p.speed(10)
                            
                            def rect(pen, col, x, y):
                                pen.color(col)
                                pen.begin_fill()
                                for i in range(2):
                                    pen.fd(x)
                                    pen.rt(90)
                                    pen.fd(y)
                                    pen.rt(90)
                                pen.end_fill()
                            
                            def move(pen, x, y):
                                pen.pu()
                                pen.goto(x, y)
                                pen.pd()
                            
                            def arc(pen, col, size, angle):
                                pen.color(col)
                                pen.begin_fill()
                                pen.fd(size)
                                pen.rt(90)
                                pen.circle(-size, angle)
                                pen.rt(90)
                                pen.fd(size)
                                pen.end_fill()
                            
                            # red
                            def pen1go():
                                move(pen1, -300, 300)
                                rect(pen1, (250, 10, 135), 210, 600)
                                move(pen1, -230, 300)
                                rect(pen1, (253, 0, 85), 140, 600)
                                move(pen1, -160, 300)
                                rect(pen1, (251, 77, 137), 70, 600)
                                # white triangle
                                pen1.color((255, 255, 255))
                                pen1.begin_fill()
                                move(pen1, -190, 300)
                                pen1.goto(-300, 160)
                                pen1.fd(210)
                                pen1.goto(-190, 300)
                                pen1.end_fill()
                                # while half-circle
                                move(pen1, -195, -300)
                                pen1.dot(70)
                            
                            # yellow
                            def pen2go():
                                move(pen2, -50, 300)
                                rect(pen2, (253, 213, 83), 210, 600)
                                move(pen2, 0, 300)
                                rect(pen2, (253, 180, 11), 160, 600)
                                move(pen2, 100, 300)
                                rect(pen2, (253, 224, 85), 60, 600)
                                # white rect
                                move(pen2, 100, 250)
                                rect(pen2, (255, 255, 255), 60, 300)
                                # white tuo-circle
                                move(pen2, 160, -50)
                                pen2.color(255, 255, 255)
                                pen2.seth(110)
                                pen2.begin_fill()
                                a = 1
                                for i in range(120):
                                    if 0 <= i < 30 or 60 <= i < 90:  # 控制a的变化
                                        a = a+0.27
                                        pen2.lt(3)  # 向左转3度
                                        pen2.fd(a)  # 向前走a的步长
                                    else:
                                        a = a-0.27
                                        pen2.lt(3)
                                        pen2.fd(a)
                                pen2.end_fill()
                            
                            # blue
                            def pen3go():
                                move(pen3, 160, 300)
                                rect(pen3, (9, 74, 255), 210, 50)
                                move(pen3, 160, 250)
                                rect(pen3, (20, 158, 234), 210, 130)
                                # white
                                move(pen3, 371, 250)
                                pen3.seth(180)
                                pen3.color(255,255,255)
                                pen3.begin_fill()
                                pen3.fd(211)
                                pen3.lt(90)
                                pen3.fd(50)
                                pen3.lt(90)
                                pen3.fd(185)
                                pen3.lt(90)
                                pen3.fd(25)
                                pen3.rt(90)
                                pen3.fd(26)
                                pen3.end_fill()
                                
                                move(pen3, 345, 225)
                                pen3.seth(0)
                                arc(pen3, (255,255,255), 25, 90)
                                
                                # arcs
                                arc_cols = [(54, 93, 185),
                                            (8, 79, 190),
                                            (20, 158, 234),
                                            (9, 74, 255),
                                            (15, 0, 252)]
                                r = 210
                                for i in range(5):
                                    move(pen3, 160, -90)
                                    pen3.seth(90-i*36)
                                    arc(pen3, arc_cols[i], r, 36)
                            t.setup(1200, 800)
                            
                            pen1go()
                            pen2go()
                            pen3go()
                            # hide
                            for p in pens:
                                p.ht()
                            t.mainloop()
                            

                            @

                            • @ 2023-10-21 15:25:07
                              这个价位表有点意思😄这个价位表有点意思😄
                              • @ 2023-10-21 11:09:13

                                发疯的讨论会被删除,严重会被封号。 image

                                • @ 2023-10-20 18:06:19
                                  来休息一下来休息一下
                                  • @ 2023-10-9 15:44:10

                                    Python的GESP真题也在更新, 会Python的可以去刷一下。

                                    • 1