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. javascript中json字符串对象转化

    li = [1,2,3,4] s = JSON.stringify(li)  ---转化为字符串 JSON.parse(s) --转化为对象

  2. ElasticSearch 基础 2

    ================================== 高级查询 =========================== ========== 子条件查询 =========== _sc ...

  3. docker--docker介绍

    2 docker 介绍 2.1 容器技术 在计算机的世界中,容器拥有一段漫长且传奇的历史.容器与管理程序虚拟化 (hypervisor virtualization,HV)有所不同,管理程序虚拟化通过 ...

  4. oracle--优化思路

  5. The Log-Structured Merge-Tree(译)

    coming from http://duanple.blog.163.com/blog/static/7097176720120391321283/

  6. [Web 前端] 016 css 元素的转换

    三种元素之间的转换 display 属性是用来设置元素的类型及隐藏的 常用的属性有 none 元素隐藏且不占位置 block 元素以块元素显示 inline 元素以内联元素显示 inline-bloc ...

  7. (4.23)SQL Server中的加密

    转自:https://www.cnblogs.com/CareySon/archive/2012/04/01/SQL-SERVER-Encryption.html 简介 加密是指通过使用密钥或密码对数 ...

  8. package.json说明

    package.json是什么? 直接的说:就是管理你本地安装的npm包 一个package.json文件可以做如下事情: 展示项目所依赖的npm包 允许你指定一个包的版本[范围] 让你建立起稳定,意 ...

  9. (一:NIO系列)JAVA NIO 简介

    出处:JAVA NIO 简介 Java 中 New I/O类库 是由 Java 1.4 引进的异步 IO.由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O, ...

  10. 游戏服务端pomelo完整安装配置过程

    版权声明:本文为博主原创文章,转载或又一次发表请先与我联系. https://blog.csdn.net/jonahzheng/article/details/27658985 游戏服务端pomelo ...