zoukankan      html  css  js  c++  java
  • Wannafly挑战赛13 C:zzf的好矩阵(思维)

    题目描述

    一个8 * 8的棋盘,第一个格子放1个麦穗,第二个格子放2个麦穗,第三个格子放4个麦穗……那么最后,共要放几个麦穗呢?

    zzf表示这个问题实在太简单,于是重新规定了游戏的规则。

    初始的棋盘为空,棋盘大小为p*p,然后他要对棋盘进行若干次操作,可以被选择的操作如下:

    1、选择一行,每个格子再放一个麦穗

    2、选择一列,每个格子再放一个麦穗

    进行若干次操作后,如果得到的棋盘满足如下性质

    1、每个格子都有至少一个麦穗

    2、每个格子最多只能有p*p个麦穗

    3、任意两个格子的麦穗数不同

    如果满足以上三条,那么称这个棋盘是一个好棋盘,若只是构造一个好棋盘那就太没意思了,zzf想知道他能得到多少个不同的好矩阵

    定义不同的矩阵即只要存在一个位置不同即是不同的

    答案对998244353取模

    输入描述:
    第一行读入一个数p,表示这个棋盘的大小
    输出描述:
    输出一行包括一个数,表示好棋盘的个数
    示例1
    输入
    2
    输出
    8
    说明
    样例解释 :
    1 2
    3 4
    3 4
    1 2
    1 3
    2 4
    2 4
    1 3
    2 1
    4 3
    4 3
    2 1
    3 1
    4 2
    4 2
    3 1
    备注:
    2 <= p <= 1e6, 保证p是质数
    题意
    如上
    题解
    首先自己写一个3*3的棋盘
    1,2,3
    4,5,6
    7,8,9
    可以发现行和行可以交换,列和列可以交换,易想到行和列全排列p!*p!
    然后,通过观察样例发现,棋盘可以横过来
    1,4,7
    2,5,8
    3,6,9
    这样又是p!*p!
    综上所述,答案就是2*p!*p!(题解的推理太神了,蒻鸡根本看不懂)
    代码
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long int
     4 const ll mod=998244353,N=1e6+5;
     5 int main()
     6 {
     7     ll p,jc[N];
     8     jc[1]=1;
     9     for(int i=2;i<N;i++)
    10         jc[i]=jc[i-1]*i%mod;
    11     cin>>p;
    12     cout<<2*jc[p]*jc[p]%mod;
    13     return 0;
    14 }
  • 相关阅读:
    document.getElementById的简便方式
    uri编解码
    javascript数组
    前端网站收藏
    html5 canvas
    interview material
    Merge into(oracle)
    机器学习入门二 ----- 机器学习术语表
    机器学习入门一 ------- 什么是机器学习,机器学习的在实际中的用处
    Dubbo 源码分析系列之一环境搭建
  • 原文地址:https://www.cnblogs.com/taozi1115402474/p/8745824.html
Copyright © 2011-2022 走看看