3 条题解

  • 0
    @ 2024-4-9 1:20:37

    【2020年省赛B组】试题C: 蛇形填数

    题解

    规律题。

    定义,表示当前位置所在行,c表示当前位置所在列,ans 记录当前位置的数值。 那么下一个位置将会有以下六种情况:

    • r=1r = 1,c为奇数:那么下一步将会到达的位置为(r,c+1r, c +1)。
    • r=1r = 1,c为偶数:那么下一步将会到达的位置为(r+1,c1r+1, c - 1)。
    • c=1c= 1,r为偶数,那么下一步将会到达的位置为(r+1,cr+1, c)。
    • c=1c= 1,r为奇数且r1r \neq 1,那么下一步将会到达的位置为(r1,c+1r - 1, c + 1)。
    • r1r \neq 1,c1c \neq 1,r+cr + c为奇数,那么下一步将会到达的位置为(r+1,c1r + 1, c - 1)。
    • r1r \neq 1,c1c \neq 1,r+cr +c为偶数,那么下一步将会到达的位置为(r1,c+1r - 1, c +1)。 按照这 6 种情况模拟,每走一步 ans 就加 1,直到 r = 20,c= 20 时结束模拟输出 ans。 最后的答案为 761

    提交代码

    #include<bits/stdc++.h>
    using namespace std;
    signed main()
    {
        int r = 1 , c = 1 , ans = 1;
        while(r != 20 || c != 20){
            if(r == 1){
                if(c & 1) c ++ ;
                else r ++ , c --;
            }
            else if(c == 1){
                if(r % 2 == 0) r ++;
                else r -- , c ++;
            }
            else if((r + c) % 2) r ++ , c -- ;
            else r -- , c ++ ;
            ans ++ ;
        }
        cout << ans << '\n';
        return 0;
    }
    

    信息

    ID
    998
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    83
    已通过
    39
    上传者