예제 #1
0
파일: 1034557.cs 프로젝트: qifanyyy/CLCDSA
        public void Solve()
        {
            var n = sc.Integer();
            var m = sc.Integer();

            if (m == 1)
            {
                IO.Printer.Out.WriteLine(1);
                return;
            }
            var table = new ModTable(2001 * 2001);
            var dp    = Enumerate(n + 2, x => new ModInteger[n + 2]);

            dp[0][0] = 1;
            for (int i = 0; i <= n; i++)
            {
                for (int j = 0; j <= n; j++)
                {
                    var rem = n - i + (m - 1) * (n - j);

                    dp[i + 1][j] += dp[i][j];
                    if (j + 1 <= i)
                    {
                        dp[i][j + 1] += dp[i][j] * table.Combination(rem - 1, (m - 2));
                    }
                }
            }

            IO.Printer.Out.WriteLine(dp[n][n] * table.perm[n]);
        }
예제 #2
0
        public ActionResult DeleteConfirmed(int id)
        {
            ModTable modTable = db.ModTables.Find(id);

            db.ModTables.Remove(modTable);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
예제 #3
0
        public void Solve()
        {
            var n   = ri;
            var a   = Enumerate(n + 1, x => ri);
            var cnt = new int[n + 5];

            foreach (var x in a)
            {
                cnt[x]++;
            }
            var v = -1;

            for (int i = 0; i <= n; i++)
            {
                if (cnt[i] == 2)
                {
                    v = i;
                }
            }
            var p = -1; var q = -1;

            for (int i = 0; i <= n; i++)
            {
                if (a[i] == v)
                {
                    if (p == -1)
                    {
                        p = i;
                    }
                    else
                    {
                        q = i;
                    }
                }
            }
            var span  = q - p - 1;
            var table = new ModTable(n + 50);

            for (int i = 1; i <= n + 1; i++)
            {
                if (i == 1)
                {
                    IO.Printer.Out.WriteLine(n);
                }
                else
                {
                    ModInt ans = 0;
                    ans += table.Combination(n - 1, i - 2);
                    ans += table.Combination(n - 1, i);
                    ans += 2 * table.Combination(n - 1, i - 1);
                    ans -= table.Combination(n - 1 - span, i - 1);

                    IO.Printer.Out.WriteLine(ans);
                }
            }
        }
예제 #4
0
 public ActionResult Edit([Bind(Include = "ModId,UserId,PostedTime,CampID,Content,Sig,Heading")] ModTable modTable)
 {
     if (ModelState.IsValid)
     {
         db.Entry(modTable).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(modTable));
 }
예제 #5
0
        // GET: ModTables/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ModTable modTable = db.ModTables.Find(id);

            if (modTable == null)
            {
                return(HttpNotFound());
            }
            return(View(modTable));
        }
예제 #6
0
        public ActionResult AddMessage([Bind(Include = "ModId,UserId,PostedTime,CampID,Content,Sig,Heading")] ModTable modTable)
        {
            modTable.UserId = User.Identity.GetUserId();
            //User.Identity.GetUserId();
            modTable.PostedTime = System.DateTime.Now;
            if (ModelState.IsValid)
            {
                db.ModTables.Add(modTable);
                db.SaveChanges();
                return(RedirectToAction("Index", "Home"));
            }

            return(View(modTable));
        }
예제 #7
0
        public void Solve()
        {
            var n     = sc.Integer();
            var a     = sc.Integer();
            var b     = sc.Integer();
            var c     = sc.Integer();
            var d     = sc.Integer();
            var table = new ModTable(2 * n);
            var dp    = new ModInteger[n + 1];

            dp[0] = 1;
            for (int sz = a; sz <= b; sz++)
            {
                var next = new ModInteger[n + 1];
                for (int i = 0; i <= n; i++)
                {
                    if (dp[i].num == 0)
                    {
                        continue;
                    }

                    ModInteger all  = 1;
                    var        size = i;
                    for (int k = 1; k <= d; k++)
                    {
                        size += sz;
                        if (size > n)
                        {
                            break;
                        }
                        all *= table.Combination(n - size + sz, sz);
                        if (c <= k && k <= d)
                        {
                            next[size] += dp[i] * all * table.invp[k];
                        }
                    }
                }

                for (int j = 0; j <= n; j++)
                {
                    dp[j] += next[j];
                }
                //Debug.WriteLine(dp.AsJoinedString());
            }
            IO.Printer.Out.WriteLine(dp[n]);
        }
예제 #8
0
        public void Solve()
        {
            var n     = sc.Integer();
            var m     = sc.Integer();
            var k     = sc.Integer();
            var table = new ModTable(n + m + k + 1);

            ModInteger ans = 0;
            ModInteger C   = 1;
            var        l   = 0;
            var        r   = 0;

            for (int i = n; i <= n + m + k; i++)
            {
                var a = table.Combination(i - 1, n - 1);
                a   *= ModInteger.Pow(3, n + m + k - i);
                a   *= C;
                ans += a;
                C   *= 2;
                var rem = i - n + 1;
                Debug.WriteLine("{0} {1}", l, r);
                var nl = Math.Max(0, rem - k);
                var nr = Math.Min(m, rem);
                if (l != nl)
                {
                    C -= table.Combination(i - n, l);
                }
                if (r == nr)
                {
                    C -= table.Combination(i - n, r);
                }
                else if (r > nr)
                {
                    C -= table.Combination(i - n, r) * 2;
                }
                l = nl;
                r = nr;
            }
            IO.Printer.Out.WriteLine(ans);
        }
예제 #9
0
        public void Solve()
        {
            var n = ri;
            var m = ri;

            if (n < m)
            {
                Swap(ref n, ref m);
            }
            var table = new ModTable(n + m);

            if (n == m)
            {
                IO.Printer.Out.WriteLine(2 * table.fact[n] * table.fact[m]);
            }
            else if (n - m == 1)
            {
                IO.Printer.Out.WriteLine(table.fact[n] * table.fact[m]);
            }
            else
            {
                IO.Printer.Out.WriteLine(0);
            }
        }