HDU6415 Rikka with Nash Equilibrium

找规律 + 大数

由于规律会被取模破坏,所以用了java

找出规律的思路是:

对于一个n*m的矩阵构造,我先考虑n*1的构造,很容易知道它是n!种方法。然后对于n*2的矩阵构造,就是在n*1的矩阵中新加入n个元素的排列组合,当然这里面一定会有非法的情况。通过打表可以暴力的搜出5*5以内的答案,所以我就可以知道从n*1的矩阵扩展到n*2的矩阵中有多少种非法组合(n <= 5 只知道小数据)。同理对于n*2扩展到n*3以后到n*(m-1)扩展到n*m的正确方案数和每次剔除的方案数就可以得到(小数据暴力得到)。然后发现规律 每次正确合法方案数:非法方案数 = i :(n-1);i从2迭代到m就可以得到答案。

java版本:

//package acm;

import java.math.BigInteger;
import java.awt.Container;
import java.math.*;
import java.math.BigInteger;
import java.util.*; import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;
public class Main
{ public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int t = cin.nextInt();
for(int i=;i<=t;i++)
{
int n = cin.nextInt();
int m = cin.nextInt();
BigInteger k = cin.nextBigInteger(); if(n==)
{
BigInteger ans = BigInteger.ONE;
for(int j=;j<=m;j++)
{
ans = ans.multiply(BigInteger.valueOf(j));
}
ans = ans.mod(k);
System.out.println(ans);
}
else {
BigInteger ans1 = BigInteger.ONE;
for(int j=;j<=n;j++)
{
ans1 = ans1.multiply(BigInteger.valueOf(j));
} //System.out.println(ans1);
for(int j=;j<=m;j++)
{
BigInteger tt = BigInteger.valueOf(j*n);
BigInteger temp = BigInteger.ONE;
for(int kk=;kk<n;kk++)
{
temp = temp.multiply(tt.subtract(BigInteger.valueOf(kk)));
}
ans1 = ans1.multiply(temp);
ans1 = ans1.multiply(BigInteger.valueOf(j)).divide(BigInteger.valueOf(j+n-)); }
ans1 = ans1.mod(k);
System.out.println(ans1);
}
}
cin.close();
}
}

这道题也可以用c++来通过对数进行拆分成质数的乘积来记录大数(因为保证了过程中除法都是整除)

c++版本:

#include <bits/stdc++.h>

using namespace std;

int cnt[],prime[],tag[];
void init(int n){
int cnt = ;
for(int i = ;i <= n;++i){
if(!tag[i]) prime[cnt++] = i;
for(int j = ;j < cnt && prime[j] * i <= n;++j){
tag[i*prime[j]] = ;
if(i % prime[j] == ) break;
}
}
}
vector<int> V[];
long long mod;
long long power(long long a,long long k){
long long ret = ;
while(k){
if(k & ) ret = ret * a % mod;
a = a * a % mod;
k >>= ;
}
return ret;
} int main()
{
init();
int T;
cin >> T;
for(int i = ;i < ;++i){
for(long long j = ;j * prime[i] <= ;++j){
V[prime[i]*j].push_back(i);
}
}
while(T--)
{
memset(cnt,,sizeof(cnt));
int n,m;
scanf("%d%d%lld",&n,&m,&mod);
for(int i = n*m;i > ;--i){
int siz = V[i].size();
int tmp = i;
for(int j = ;j < siz;++j){
while(tmp%prime[V[i][j]] == ) tmp /= prime[V[i][j]],cnt[V[i][j]]++;
}
}
for(int i = ;i <= m;++i){
int tmp = n-+i;
int siz = V[tmp].size();
for(int j = ;j < siz;++j){
while(tmp%prime[V[n-+i][j]] == ) tmp /= prime[V[n-+i][j]],cnt[V[n-+i][j]]--;
}
tmp = i;
siz = V[tmp].size(); for(int j = ;j < siz;++j){
while(tmp%prime[V[i][j]] == ) tmp /= prime[V[i][j]],cnt[V[i][j]]++;
}
}
long long ans = ;
for(int i = ;i < ;++i){
ans = ans * power(prime[i],cnt[i]) % mod;
}
cout << ans << endl;
}
return ;
}

HDU6415 Rikka with Nash Equilibrium的更多相关文章

  1. 杭电多校第九场 HDU6415 Rikka with Nash Equilibrium dp

    Rikka with Nash Equilibrium Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K ...

  2. hdu6415 Rikka with Nash Equilibrium (DP)

    题目链接 Problem Description Nash Equilibrium is an important concept in game theory. Rikka and Yuta are ...

  3. hdu-6415 Rikka with Nash Equilibrium dp计数题

    http://acm.hdu.edu.cn/showproblem.php?pid=6415 题意:将1~n*m填入一个n*m矩阵 问只有一个顶点的构造方案. 顶点的定义是:某数同时是本行本列的最大值 ...

  4. 【杂题总汇】HDU2018多校赛第九场 Rikka with Nash Equilibrium

    [HDU2018多校赛第九场]Rikka with Nash Equilibrium 又是靠这样一道题擦边恰好和第两百名分数一样~愉快

  5. HDU - 6415 多校9 Rikka with Nash Equilibrium(纳什均衡+记忆化搜索/dp)

    Rikka with Nash Equilibrium Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K ...

  6. [hdoj6415 Rikka with Nash Equilibrium][dp]

    http://acm.hdu.edu.cn/showproblem.php?pid=6415 Rikka with Nash Equilibrium Time Limit: 10000/5000 MS ...

  7. HDU 6415 Rikka with Nash Equilibrium (计数DP)

    题意:给两个整数n,m,让你使用 1 ~ n*m的所有数,构造一个矩阵n*m的矩阵,此矩阵满足:只有一个元素在它的此行和此列中都是最大的,求有多种方式. 析:根据题意,可以知道那个元素一定是 n * ...

  8. 三十分钟理解博弈论“纳什均衡” -- Nash Equilibrium

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 纳什均衡(或者纳什平衡),Nash ...

  9. hdu6415 记忆化搜索或找规律

    Rikka with Nash Equilibrium Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Sub ...

随机推荐

  1. 剑指offer--day05

    1.1 题目:二进制中1的个数:输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 1.2 解题思路:通过位移来进行.举例:7(二进制:0111),7 >> 1(得到:001 ...

  2. Hadoop and Big Data

    Hadoop(1): HDFS Basics Hadoop(2):HDFS Block Management Hadoop(3): Prepare inputs for MapReduce mappe ...

  3. python+selenium元素定位之CSS学习02

    参考文档:https://www.runoob.com/cssref/css-selectors.html CSS选择器用于选择你想要的元素的样式的模式. "CSS"列表示在CSS ...

  4. RocketMQ安装部署及整合Springboot

    消息中间件的功能: 通过学习ActiveMq,kafka,rabbitMq这些消息中间件,我们大致能为消息中间件的功能做一下以下定义:可以先从基本的需求开始思考 最基本的是要能支持消息的发送和接收,需 ...

  5. JAVA Error:The project was not built since its build path is incomplete. Cannot find the class file for java.util.Map$Entry.....

    今天,学习Netty框架时遇到error:Description Resource Path Location Type:The project was not built since its bui ...

  6. 在eclipse上配置多个jdk

    在实际生产中,可能会遇到这样的问题:在eclipse中存在多个项目时,可能不同的项目需要不同的jdk版本.这时,我们就可以给eclipse配置多个jdk进行切换. 注:貌似只有较新版eclipse才能 ...

  7. HDU 4014 Jimmy’s travel plan(图计数)

    Jimmy’s travel plan Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  8. 模板 - 线性递推BM

    模数是998244353的话好像NTT可以更快. #include<bits/stdc++.h> using namespace std; typedef long long ll; co ...

  9. [转载]企业级应用架构(NHibernater+Spring.Net+MVC3)

    本人已经从事公司两套这类架构系统的开发工作啦!对于这套架构,我惊叹不已!BPS和CMS系统都是采用这套架构.但本人也同时渐渐发现了这套架构有诸多 不足之处,于是本人利用闲暇时光进一步改进了这套架构.新 ...

  10. 行人重识别(ReID) ——基于MGN-pytorch进行可视化展示

    下载MGN-pytorch:https://github.com/seathiefwang/MGN-pytorch 下载Market1501数据集:http://www.liangzheng.org/ ...