1957C - How Does the Rook Move?

题目链接:How Does the Rook Move?

如图:

因为每行每列都只能放一个棋子,因此我们用绿点来表示下的棋子,发现一个规律,当红色格子都被绿线划过时,那么就不能下棋子。当这个白色点放在x=y这个点,也就是横纵坐标相等时,红色这个点只占了一个,而当x!=  y时,占了两个红色格子,然后剩余我们可以填的就是剩下的蓝色格子,和两个红色格子没填,因此转化一下形成了右图。

再看如下图:

首先我们可以得知,每个棋子先下哪里后下哪里最后的结果不变,说的通俗一点,假设给你看别人刚下完的围棋,你知道白棋哪个位置是第一次下的吗?

因此最后的结果跟顺序无关,那么我们可以从最后一个点枚举,我们一次操作可以占一个红色格子,可以占两个红色格子,那么假设占一个格子,最后剩余的红点就是n-1,如果取两个格子,那么我们要从蓝色的区域里面取,也就是从( n - 1 )个格子里面选一个,又因为这是镜像的,所以我们可以选白棋也可以选黑棋,因此要×2.

所以最后的结论就是:
f(n)=f(n-1) + 2*(n-1)*f(n-2) 

代码附上:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N =3e5+5;
const int mod = 1e9+7;
int f[N];
int n,k;

void solve(){
	cin>>n>>k;
	int m=n;
	for(int i=1;i<=k;i++){
		int x,y;cin>>x>>y;
		if(x==y)m-=1;
		else m-=2; 
	}
	
	memset(f,0,sizeof(f));
	f[0]=f[1]=1;
	
	for(int i=2;i<=m;i++){
		f[i]=(f[i-1]+(2*(i-1)*f[i-2])%mod)%mod;
	}
	
	cout<<f[m]<<"\n";
}

signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t;cin>>t;
	while(t--){
		solve();
	}
	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/564918.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

7.机器学习-十大算法之一拉索回归(Lasso)算法原理讲解

7.机器学习-十大算法之一拉索回归&#xff08;Lasso&#xff09;算法原理讲解 一摘要二个人简介三前言四原理讲解五算法流程六代码实现6.1 坐标下降法6.2 最小角回归法 七第三方库实现7.1 scikit-learn实现&#xff08;坐标下降法&#xff09;&#xff1a;7.2 scikit-learn 实现…

扫描工具nmap

介绍 说到黑客&#xff0c;知识就是力量。您对目标系统或网络的了解越多&#xff0c;可用的选项就越多。因此&#xff0c;在进行任何利用尝试之前&#xff0c;必须进行适当的枚举。 假设我们获得了一个 IP&#xff08;或多个 IP 地址&#xff09;来执行安全审计。在我们做任何…

第八周学习笔记DAY.1-异常

本课目标 了解异常概念 理解Java异常处理机制 会捕捉异常 会抛出异常 了解Java异常体系结构 什么是异常 异常是指在程序的运行过程中所发生的不正常的事件&#xff0c;它会中断正在运行的程序 生活中&#xff0c;根据不同的异常进行相应的处理&#xff0c;而不会就此中断…

空间金字塔池化SPP、SPPF、ASPP、PPM、ASPP等汇总

Original SPP 最原版的SPP&#xff08;Spatial Pyramid Pooling&#xff09;是14年在何凯明大神的《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》这篇文章中提出的&#xff0c;具体介绍见SPP: Spatial Pyramid Pooling_spatial pyramid …

制造数字化“管理套路”

在当今竞争激烈的市场环境中&#xff0c;制造企业始终关心三个核心问题&#xff1a;生产效率、产品质量、成本控制&#xff0c;所以许多企业渴望加强对生产过程的管理控制。 生产过程是一个相对复杂的过程&#xff0c;涉及到多个环节和因素。从原材料的采购到产品的设计、生产…

JavaSE-15笔记【注解(+2024新)】

文章目录 1.注解概述2.几个常用的JDK内置的注解2.1 Deprecated2.2 Override2.3 SuppressWarnings2.4 FunctionalInterface 3.自定义注解3.1 注解也可以定义属性3.2 注解的使用规则补充 4.元注解4.1 Retention4.2 Target4.3 Documented4.4 Inherited4.5 Repeatable 5.通过反射获…

docker环境搭建

项目环境搭建 1、安装 Linux 虚拟机 &#xff08;1&#xff09;下载安装&#xff1a; VM VirtualBox 下载安装&#xff1a;Downloads – Oracle VM VirtualBox&#xff0c;要先开启CPU虚拟化 &#xff08;2&#xff09;通过vagrant&#xff0c;在VirtualBox中安装虚拟机 下…

500道Python毕业设计题目推荐,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【Java基础】21.重写(Override)与重载(Overload)

文章目录 一、重写(Override)1.方法重写2.方法的重写规则3.Super 关键字的使用 二、重载(Overload)1.方法重载2.重载规则3.实例 三、重写与重载之间的区别 一、重写(Override) 1.方法重写 重写&#xff08;Override&#xff09;是指子类定义了一个与其父类中具有相同名称、参…

LeetCode - 150. 逆波兰表达式求值

LeetCode - 150. 逆波兰表达式求值 解题思路&#xff1a; 想要解决该题目&#xff0c;我们首先需要知道什么是逆波兰表达式&#xff0c;逆波兰表达式是一种后缀表达式&#xff0c;所谓后缀就是指算符写在后面。 我们平常使用的算式则是一种中缀表达式&#xff0c;如( 1 2 …

Spring基础 SpringAOP

前言 我们都知道Spring中最经典的两个功能就是IOC和AOP 我们之前也谈过SpringIOC的思想 容器编程思想了 今天我们来谈谈SpringAOP的思想 首先AOP被称之为面向切面编程 实际上面向切面编程是面向对象的编程的补充和完善 重点就是对某一类问题的集中处理 前面我们写的统一异常管理…

React Router 6 + Ant Design:构建基于角色的动态路由和菜单

要根据用户的角色生成不同的路由菜单并实现权限控制,你可以采取以下步骤: 定义路由配置 首先,你需要定义一个包含所有可能路由的配置文件,例如: const routes [{path: /dashboard,element: <DashboardPage />,roles: [admin, manager, user]},{path: /users,element:…

设计模式——模板方法

1)模板方法模式(Template Method Pattem)&#xff0c;又叫模板模式(Template Patern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 2)简单说&#xff0c;模板方法模式 定义一个操作中…

Splashtop Cloud RADIUS 解决方案入围教育技术奖

2024年4月17日 加利福尼亚州库比蒂诺 Splashtop 在简化随处办公的远程解决方案领域处于领先地位&#xff0c;该公司自豪地宣布最近入围了《教育技术文摘》&#xff08;EdTech Digest&#xff09;的“2024年教育技术奖”的“炫酷工具”决赛。教育科技奖成立于2010年&#xff0c…

都2024 年了,可以卸载的VS Code 插件

在 VS Code 中&#xff0c;庞大的插件市场提供了丰富多样的扩展功能&#xff0c;以增强编码体验和效率。然而&#xff0c;如果你安装了很多插件&#xff0c;就可能会导致&#xff1a; 性能下降&#xff1a;过多的插件可能导致 VS Code 的启动速度变慢&#xff0c;特别是在启动或…

【自动驾驶车辆-运动控制】运动学模型(Kinematic Model) | 手写数学推导公式 by.Akaxi

【前言】 在设计自动驾驶规控算法时&#xff0c;常常需要获取车辆的各种位姿、角度等信息&#xff0c;要控制车辆的运动&#xff0c;首先要对车辆的运动建立数字化模型&#xff0c;模型建立的越准确&#xff0c;对车辆运动的描述越准确&#xff0c;对车辆的跟踪控制的效果就越…

【Leetcode笔记】236.二叉树的最近公共祖先

文章目录 题目要求ACM运行结果 题目要求 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能…

过滤器Filter和拦截器Interceptor心得

上一篇文章讲了监听器Listener&#xff0c;下面我们来讲一下过滤器和拦截器。 一、过滤器Filter。 首先&#xff0c;servlet容器&#xff08;比如tomcat&#xff09;肯定的要有servlet才能发挥它的光彩。在上古jsp时代&#xff0c;我们会写各种servlet通过不同的请求来实现我…

浅说深度优先搜索(中)——回溯

写在最前 相信在你们不懈的努力之下&#xff0c;基本的递归一定可以写出来了&#xff0c;那么我们现在就来看看递归的升级版——回溯怎么写吧&#xff01; 简说回溯 递归是一种特别重要的解题策略。大部分题目需要找到最优解&#xff0c;而这个求解过程可能存在一定的规律性…

排序算法之基数排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性基数排序O(n*k)O(n*k)O(n*k)O(nk)Out-place稳定 稳定&#xff1a;如果A原本在B前面&#xff0c;而AB&#xff0c;排序之后A仍然在B的前面&#xff1b…