题目链接:构造矩阵

题目描述

我们希望构造一个 n×m 的整数矩阵。

构造出的矩阵需满足:

每一行上的所有元素之积均等于 k。
每一列上的所有元素之积均等于 k。
保证 k 为 1 或 −1。 请你计算,一共可以构成出多少种不同的满足条件的矩阵。 由于结果可能很大,你只需要输出对 109+7 取模后的结果。 输入格式
共一行,包含三个整数 n,m,k。 输出格式
一个整数,表示对 109+7 取模后的结果。 数据范围
前 3 个测试点满足 1≤n,m≤3。
所有测试点满足 1≤n,m≤1018,k 为 1 或 −1。 难度:困难
时/空限制:1s / 256MB
总通过数:300
总尝试数:1360
来源:AcWing,第127场周赛
算法标签

样例

输入样例1:
1 1 -1
输出样例1:
1
输入样例2:
1 3 1
输出样例2:
1
输入样例3:
3 3 -1
输出样例3:
16

算法1

(两次快速幂) \(O(log(n-1*m-1))\)

套路:

把最下面一行和最右边一列拿出来,只考虑左上角这个n-1*m-1的小矩形的取法,这个小矩形每个方格可以取1或者-1,

一共2^(n-1)(m-1)种不同的取法,而对于每一行,只要确定了前m-1个,最后一个就确定了,对于每一列,只要确定了前n-1列,最后一个也确定了。

但是要注意,最右下角这个点,可能会无法确定

A B C 表示的是那个区域的乘积

看最后一行,由于每一行的乘积都是k,所以xA=k,所以x=k/A

看最右边一列,由于每一列的乘积都是k,所以x
B=k,所以x=k/B

那么x如果想要确定,就必须得是 k/A=k/B,也就是A要等于B

而A,B都是有左上角的矩形确定的,

AC 是m-1列的乘积,每一列成绩是k,那么AC=k^(m-1)

BC 是n-1行的乘积,每一行成绩是k,那么BC=k^(n-1)

所以,A=k^(m-1) /C, B=k^(n-1)/C

想要让A=B,对于k=1,一定成立,对于k=-1,需要m-1和n-1奇偶性相同,否则不成立

而成立的情况,答案就是左上角的小矩形的填法,也就是2^(n-1)(m-1)种不同的取法,由于指数很大,所以可以做两次快速幂,或者用欧拉函数:因为我们知道 a^(p-1) 同余1modp,a与p互质,p为质数,所以我们可以把指数mod (p-1)

C++ 代码

#include<iostream>
using namespace std;
const int mod=10e9+7;
typedef long long LL; LL qmi(LL a,LL k,LL p)
{
long long res=1; while(k)
{
if(k&1)
{
res=res*a%p;
}
k>>=1;
a=a*a%p;
} return res;
}
int main()
{
long long n,m,k;
cin>>n>>m>>k; if(n==1||m==1)
{
cout<<1<<endl; return 0;
}
LL p = qmi(2, n - 1, mod);
if((n + m) & 1) cout << 0;
else cout << qmi(p, m - 1, mod); return 0;
}

算法2

(欧拉函数) \(O(log(n-1*m-1))\)

C++ 代码

#include<iostream>
using namespace std;
const int mod=1e9+7;
typedef long long LL; LL qmi(LL a,LL k,LL p)
{
long long res=1; while(k)
{
if(k&1)
{
res=res*a%p;
}
k>>=1;
a=a*a%p;
} return res;
}
int main()
{
LL n, m, k;
cin >> n >> m >> k; if (k == -1 && n % 2 != m % 2) puts("0");
else
{
LL t = (n - 1) % (mod - 1) * ((m - 1) % (mod - 1)) % (mod - 1);
cout << qmi(2, t, mod) << endl;
} return 0;
}

Acwing127周赛第三题 构造矩阵 (套路)的更多相关文章

  1. NOIP2014-普及组复赛-第三题-螺旋矩阵

    题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵 ...

  2. LeetCode 56,57,60,连刷三题不费劲

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第34篇文章,刚好接下来的题目比较简单,很多和之前的做法类似.所以我们今天出一个合集,一口气做完接下来的57.5 ...

  3. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  4. NOIP2008提高组(前三题) -SilverN

    此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...

  5. 阿里聚安全攻防挑战赛第三题Android PwnMe解题思路

    阿里聚安全攻防挑战赛第三题Android PwnMe解题思路 大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目.我们今天带你一探究竟,如何攻破这道题目. 一.题目 购物应用 ...

  6. Number Sequence(HDU 1005 构造矩阵 )

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  7. NOIP2005-普及组复赛-第三题-采药

    题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山 ...

  8. [数学-构造矩阵]NEFU 1113

    依据题意.我已经推导出tn的公式.ti=ti.a+ti.b,ti.a=5*t(i-1).a+4*t(i-1).b,ti.b=t(i-1).a+t(i-1).b 然而以下居然不能继续推到sn的公式!!! ...

  9. poj 3735 Training little cats(构造矩阵)

    http://poj.org/problem?id=3735 大致题意: 有n仅仅猫,開始时每仅仅猫有花生0颗,现有一组操作,由以下三个中的k个操作组成: 1. g i 给i仅仅猫一颗花生米 2. e ...

  10. HDU 3306 Another kind of Fibonacci ---构造矩阵***

    Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

随机推荐

  1. OlllyDbg调试器和IDA调试器

    OllyDbg调试器 OllyDbg称为Ring3级的首选工具.可以识别数千个被和Windows频繁使用的函数,并能将其注释出来.它会自动分析函数过程.循环语句等 OllyDbg主界面 快捷键 Add ...

  2. 【持续更新】C/C++ 踩坑记录(一)

    未定义行为之 NULL dereference 下面这段代码中 is_valid() 解引用了空指针 str,我们的直觉是编译运行后将迎来 SIGSEGV,然而事情并非所期望的那样. /* * ub_ ...

  3. 介绍Centos7启用过程中用到的rpm软件包、及其作用

    序号 包名 作用 1 udev 系统设备管理器,用于管理设备驱动程序和设备的元数据. 2 lvm2 Logical Volume Manager 2(LVM2)是一个用于管理和分配存储设备的工具,允许 ...

  4. WinForm RichTextBox 加载大量文本卡死和UTF-8乱码问题

    在RichTextBox控件的使用中我们会遇到加载TXT文件的问题,通常我们会有两种处理方式. 一.加载TXT字符串,设置到RichTextBox //打开并且读取文件数据 FileStream fs ...

  5. Nginx报错:nginx: [error] OpenEvent("Global\ngx_reload_14944") failed (2: The system cannot find the file specified)

    nginx.exe -s reload  执行报错 错误原因: Nginx 尚未启动导致,执行 start nginx 命令开启Nginx nginx.exe -s reload 至此问题解决

  6. 关于Tensorflow!目标检测预训练模型的迁移学习

    ​ 前言 关于TF的目标检测迁移学习,我一开始是想通过Tensorflow提供的API,用JS来实现的.但是官方不但没有案例,网上也没有踩坑的博客,加之我又着急要弄水印检测. 于是就在网上看了很多人用 ...

  7. 七 APPIUM Android 定位方式(转)

    1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement element = driver.findElemen ...

  8. .NET Core基础到实战案例零碎学习笔记

    前言:前段时间根据 [老张的哲学] 大佬讲解的视频做的笔记,讲的很不错.此文主要记录JWT/DI依赖注入/AOP面向切面编程/DTO/解决跨域等相关知识,还包含一些.NET Core项目实战的一些案例 ...

  9. 微服务集成redis并通过redis实现排行榜的功能

    默认你已经看过我之前的教程了,并且拥有上个教程完成的项目, 之前的教程 https://www.cnblogs.com/leafstar/p/17638933.html 由于redis的安装网上教程很 ...

  10. C# 代码实现关机

    AdvApi32.LookupPrivilegeValue(null, "SeShutdownPrivilege", out var lpLuid); using var t = ...