Help!!
  • 板块灌水区
  • 楼主CleanIce
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/8/15 09:20
  • 上次更新2023/11/3 03:43:36
查看原帖
Help!!
821660
CleanIce楼主2023/8/15 09:20

题目:P5789

代码(C#)

样例都没过(输出 7)

namespace Program {
    public class Program {
        internal const int MOD = 2017;
        public static void Main() {
            string[] res1 = ReadLine().Split(' ');
            int n = int.Parse(res1[0]);
            int m = int.Parse(res1[1]);
            Matrix matrix = new();
            matrix.N = n;
            matrix.M = m;
            for (int i = 0; i <= n; i++) {
                matrix[i, i] = matrix[i, 0] = 1;
            }
            for (int i = 1; i <= m; i++) {
                string[] res2 = ReadLine().Split(' ');
                int u = int.Parse(res2[0]);
                int v = int.Parse(res2[1]);
                matrix[u, v] = matrix[v, u] = 1;
            }
            int t = int.Parse(ReadLine());
            matrix = Matrix.QuikPow(matrix, t);
            int ans = 0;
            for (int i = 0; i <= n; i++) {
                ans = (ans + matrix[1, i]) % MOD;
            }
            Console.WriteLine(ans);
        }

        public static string ReadLine() {
            return Console.ReadLine() ?? "";
        }
    }

    class Matrix {
        private const int MAXN = 105;
        private int[,] data = new int[MAXN, MAXN];
        private int n = 0;
        private int m = 0;

        public int N {
            get { return n; }
            set { n = value; }
        }

        public int M {
            get { return m; }
            set { m = value; }
        }

        public int this[int x, int y] {
            get { return data[x, y]; }
            set { data[x, y] = value; }
        }

        public void Clear() {
            n = m = 0;
            Array.Clear(data);
        }

        public static Matrix operator*(Matrix a, Matrix b) {
            Matrix res = new();
            res.Clear();
            res.n = a.n;
            res.m = b.m;
            for (int i = 0; i <= a.n; i++) {
                for (int j = 0; j <= a.m; j++) {
                    for (int k = 0; k <= b.m; k++) {
                        res[i, k] =  (res[i, k] + a[i, j] * b[j, k]) % Program.MOD;
                    }
                }
            }
            return res;
        }

        public static Matrix QuikPow(Matrix baseMatrix, int powerNum) {
            Matrix res;
            if (powerNum == 1) {
                return baseMatrix;
            } else if (powerNum % 2 == 1) {
                Matrix temp = QuikPow(baseMatrix, powerNum / 2);
                res = temp * temp * baseMatrix;
            } else {
                Matrix temp = QuikPow(baseMatrix, powerNum / 2);
                res = temp * temp;
            }
            return res;
        }
    }
}

还有,我的本地是用最高版的 C# 和 .NET7,不要说我漏了 using System;

2023/8/15 09:20
加载中...