放课后的约定 by:S_H_Y
题目背景
十年。十年前。天空的蔚蓝,云彩的舒软。我,怎么会认识你。洁白的,洁白的,十年前。我无法忘却。终究是小时候的约定。记忆被困在冻土里,有时我不认识那天的我。难道一切,都锁在心里面了吗?
题目描述
一条君的项链弄丢了,或许还躺在学校草坪里的某处,那条项链系着他珍藏的一把锁。千棘虽然不情愿,但是也必须帮忙找,因为这起事大概是她造成的。
学校草坪可以看作N×M的格子。一条从左上角(1,1),千棘从右下角(n,m)开始寻找。每个时刻,一条会选择一个他自己没有找过的某块草坪开始找,(他应该不知晓千棘有没有找过这块草坪)。千棘也这么做。但是,同一时刻,一条和千棘不能在同一个格子里,不然他们会发生口角。
历史的车轮已经留下辙迹,未来的迷一般的花园却绚丽绛紫、怦然心动。是宇宙幽默的必然,还是人类甜涩的多情。总之,他们想知道,这样的搜寻方案,有多多少少呢。
输入输出格式
输入格式:
第一行两个整数N,M,表示草坪的长和宽。
输出格式:
一行一个正整数Ans,表示方案数,除以23333的余数。
输入输出样例
2 2
18
样例解释:
一条:(1,1)-(1,2)-(2,1)-(2,2) 千棘:(2,2)-(1,1)-(1,2)-(2,1)
一条:(1,1)-(1,2)-(2,1)-(2,2) 千棘:(2,2)-(2,1)-(1,1)-(1,2)
一条:(1,1)-(1,2)-(2,1)-(2,2) 千棘:(2,2)-(2,1)-(1,2)-(1,1)
一条:(1,1)-(1,2)-(2,2)-(2,1) 千棘:(2,2)-(1,1)-(2,1)-(1,2)
一条:(1,1)-(1,2)-(2,2)-(2,1) 千棘:(2,2)-(2,1)-(1,1)-(1,2)
一条:(1,1)-(1,2)-(2,2)-(2,1) 千棘:(2,2)-(2,1)-(1,2)-(1,1)
一条:(1,1)-(2,1)-(1,2)-(2,2) 千棘:(2,2)-(1,1)-(2,1)-(1,2)
一条:(1,1)-(2,1)-(1,2)-(2,2) 千棘:(2,2)-(1,2)-(1,1)-(2,1)
一条:(1,1)-(2,1)-(1,2)-(2,2) 千棘:(2,2)-(1,2)-(2,1)-(1,1)
一条:(1,1)-(2,1)-(2,2)-(1,2) 千棘:(2,2)-(1,1)-(1,2)-(2,1)
一条:(1,1)-(2,1)-(2,2)-(1,2) 千棘:(2,2)-(1,2)-(1,1)-(2,1)
一条:(1,1)-(2,1)-(2,2)-(1,2) 千棘:(2,2)-(1,2)-(2,1)-(1,1)
一条:(1,1)-(2,2)-(1,2)-(2,1) 千棘:(2,2)-(1,1)-(2,1)-(1,2)
一条:(1,1)-(2,2)-(1,2)-(2,1) 千棘:(2,2)-(1,2)-(2,1)-(1,1)
一条:(1,1)-(2,2)-(1,2)-(2,1) 千棘:(2,2)-(2,1)-(1,1)-(1,2)
一条:(1,1)-(2,2)-(2,1)-(1,2) 千棘:(2,2)-(1,1)-(1,2)-(2,1)
一条:(1,1)-(2,2)-(2,1)-(1,2) 千棘:(2,2)-(1,2)-(1,1)-(2,1)
一条:(1,1)-(2,2)-(2,1)-(1,2) 千棘:(2,2)-(2,1)-(1,2)-(1,1)
共计18种
说明
对于30%的数据,n≤2011,m≤1000;
对于100%的数据,1≤n≤20114820163637,1≤m≤201205201610。
★啊阿 淡淡浮现脑海不确定的记忆
★仅是轮廓却充满着荆棘的样子
★紧紧束缚内心
巧克力便当还是兔子沙盒。
Thanks for viewing this problem.
出题人:S_H_Y
思路:首先要明確一個問題,由於一條和千棘是二次人物或其他各種神奇的原因,他們的移動方式是瞬移。。。
然後問題就可以轉化為求一條的全部搜索路線每條各自對應的錯排列的總和。
由於第一個搜索點是確定的,所以一條的全部搜索路線a=(n*m-1)!。
由於千棘的第一個搜索點也是確定的,所以每一條一條的搜索路線對應的錯排數b=f[n*m-1]=f[n*m-1]+(f[n*m-1]+1)*(n*m-2)。(這個式子是要一路推過來的)
另外,還需要惡心的高精技巧,而且還要取mod。
額呵呵,根據式子,如果m*n>mod,輸出0即可,不用太在意n*m爆空間的問題了,高精也可以水一點了。
然而水不過,so。。。
代碼實現:
#include<cstdio>
#include<iostream>
using namespace std;
const int mod=;
long long n,m;
int yt=,qj[],ans;
int main(){
cin>>n>>m;qj[]=;
if(n>mod||m>mod||n*m>mod||n*m==){printf("0\n");return ;}//特判一下。
if(m*n==){printf("1\n");return ;}//特判一下。
for(int i=;i<=n*m-;i++){yt*=i;yt%=mod;}
for(int i=;i<=n*m;i++) qj[i]=(qj[i-]+qj[i-])*(i-)%mod;
ans=(yt*qj[n*m])%mod;
printf("%d\n",ans);
return ;
}
內心崩潰,無以言說。
题目来源:洛谷
放课后的约定 by:S_H_Y的更多相关文章
- $NOIp$前的日常
嗯,一想到没准今年\(NOIp\)之后就要退役了,觉得没准这篇博客就是我OI史上的绝唱了-- \(hhh\),希望不会这样. \(12.4\) 退役了是真的233-- 居然感到一身轻松啊qwqwq \ ...
- im协议设计选型【转】
一.im协议的分层设计所谓“协议”是双方共同遵守的规则,例如:离婚协议,停战协议.协议有语法.语义.时序三要素.(1)语法:即数据与控制信息的结构或格式(2)语义:即需要发出何种控制信息,完成何种动作 ...
- SFC游戏列表(维基百科)
SFC游戏列表 日文名 中文译名 英文版名 发行日期 发行商 スーパーマリオワールド 超级马里奥世界 Super Mario World 1990年11月21日 任天堂 エフゼロ F-Zero F-Z ...
- DLL中调用约定和名称修饰(一)
DLL中调用约定和名称修饰(一) 调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议.这种协议规定了该语言的函数中的参数传送方式.参数是否可变和由谁来 ...
- Delphi调用约定
Register Calling Convention Ojbect Pascal的默认调用约定为register,寄存器调用约定会将前三个参数依次放入eax,edx,ecx,返回值是eax(根据类型 ...
- __cdecl __stdcall __fastcall之函数调用约定讲解
首先讲解一下栈帧的概念: 从逻辑上讲,栈帧就是一个函数执行的环境:函数参数.函数的局部变量.函数执行完后返回到哪里等等. 实现上有硬件方式和软件方式(有些体系不支持硬件栈) 首先应该明白,栈是从高地址 ...
- struts2基于Convention插件的约定映射使用
一.首先说明一点:所谓的基于Convention插件的约定优于配置的使用,并不是严格意义上的零配置,struts.xml文件并不能完全舍弃. 获得Convention插件功能,所必需的jar包有:|a ...
- 读书笔记 effective c++ Item 51 实现new和delete的时候要遵守约定
Item 50中解释了在什么情况下你可能想实现自己版本的operator new和operator delete,但是没有解释当你实现的时候需要遵守的约定.遵守这些规则并不是很困难,但是它们其中有一些 ...
- Effective Java 第三版——10. 重写equals方法时遵守通用约定
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
随机推荐
- 蓝桥杯 algo——6 安慰奶牛 (最小生成树)
问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计 划除去P条道路中尽可能多的道路 ...
- iOS之沙盒机制和如何获取沙盒路径
iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...
- iphone判断当前网络连接类型
eachability只能区分出无网络.wifi和wwan(2G&2.5G&3G)类型的网络连接类型,只需重构networkStatusForFlags方法,即可详细区分出2G与3G网 ...
- SpringMvc异常
局部异常:在controller内部写一个处理异常的方法,注解ExceptionHandler(value={自己弄的异常class}) 这样发生value里面的类的异常,就可以执行这个方法,然后往r ...
- Java知识结构思维导图
- lightoj1082 线段树
//Accepted 5596 KB 396 ms //线段树求区间最小值 #include <cstdio> #include <cstring> #include < ...
- Image Generator (Image Builder)
如果你想要下载一个预编译好的镜像文件,或者想要尝试整个编译过程,一个替代方案是使用镜像生成器(Image Generator)(以前被叫做Image Builder).这是一个预编译好的OpenWrt ...
- 知道创宇CTO杨冀龙:网络安全人才决定行业格局
去年的时候,我曾经在团队内部分享了一个“网络安全人才迁徙图”,被圈子里的同行广为传播.几乎所有行业的安全人士都表示:国内网络安全行业人才资源情况并不乐观——有着10年以上网络安全行业经验的核心安全人才 ...
- C/C++ memmove 和 memcpy
这两个函数用于拷贝字符串或者一段连续的内存,函数原型: void * memcpy ( void * destination, const void * source, size_t num ); v ...
- Intellij导入外部的jar
File -> Project Structure (ctrl + shift + alt + s ) -> Module -> Dependencies -> Add... ...