题目背景

十年。十年前。天空的蔚蓝,云彩的舒软。我,怎么会认识你。洁白的,洁白的,十年前。我无法忘却。终究是小时候的约定。记忆被困在冻土里,有时我不认识那天的我。难道一切,都锁在心里面了吗?

题目描述

一条君的项链弄丢了,或许还躺在学校草坪里的某处,那条项链系着他珍藏的一把锁。千棘虽然不情愿,但是也必须帮忙找,因为这起事大概是她造成的。

学校草坪可以看作N×M的格子。一条从左上角(1,1),千棘从右下角(n,m)开始寻找。每个时刻,一条会选择一个他自己没有找过的某块草坪开始找,(他应该不知晓千棘有没有找过这块草坪)。千棘也这么做。但是,同一时刻,一条和千棘不能在同一个格子里,不然他们会发生口角。

历史的车轮已经留下辙迹,未来的迷一般的花园却绚丽绛紫、怦然心动。是宇宙幽默的必然,还是人类甜涩的多情。总之,他们想知道,这样的搜寻方案,有多多少少呢。

输入输出格式

输入格式:

第一行两个整数N,M,表示草坪的长和宽。

输出格式:

一行一个正整数Ans,表示方案数,除以23333的余数。

输入输出样例

输入样例#1:

2 2
输出样例#1:

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的更多相关文章

  1. $NOIp$前的日常

    嗯,一想到没准今年\(NOIp\)之后就要退役了,觉得没准这篇博客就是我OI史上的绝唱了-- \(hhh\),希望不会这样. \(12.4\) 退役了是真的233-- 居然感到一身轻松啊qwqwq \ ...

  2. im协议设计选型【转】

    一.im协议的分层设计所谓“协议”是双方共同遵守的规则,例如:离婚协议,停战协议.协议有语法.语义.时序三要素.(1)语法:即数据与控制信息的结构或格式(2)语义:即需要发出何种控制信息,完成何种动作 ...

  3. SFC游戏列表(维基百科)

    SFC游戏列表 日文名 中文译名 英文版名 发行日期 发行商 スーパーマリオワールド 超级马里奥世界 Super Mario World 1990年11月21日 任天堂 エフゼロ F-Zero F-Z ...

  4. DLL中调用约定和名称修饰(一)

    DLL中调用约定和名称修饰(一) 调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议.这种协议规定了该语言的函数中的参数传送方式.参数是否可变和由谁来 ...

  5. Delphi调用约定

    Register Calling Convention Ojbect Pascal的默认调用约定为register,寄存器调用约定会将前三个参数依次放入eax,edx,ecx,返回值是eax(根据类型 ...

  6. __cdecl __stdcall __fastcall之函数调用约定讲解

    首先讲解一下栈帧的概念: 从逻辑上讲,栈帧就是一个函数执行的环境:函数参数.函数的局部变量.函数执行完后返回到哪里等等. 实现上有硬件方式和软件方式(有些体系不支持硬件栈) 首先应该明白,栈是从高地址 ...

  7. struts2基于Convention插件的约定映射使用

    一.首先说明一点:所谓的基于Convention插件的约定优于配置的使用,并不是严格意义上的零配置,struts.xml文件并不能完全舍弃. 获得Convention插件功能,所必需的jar包有:|a ...

  8. 读书笔记 effective c++ Item 51 实现new和delete的时候要遵守约定

    Item 50中解释了在什么情况下你可能想实现自己版本的operator new和operator delete,但是没有解释当你实现的时候需要遵守的约定.遵守这些规则并不是很困难,但是它们其中有一些 ...

  9. Effective Java 第三版——10. 重写equals方法时遵守通用约定

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

随机推荐

  1. 自定义的dialog

    自定义的dialog  其中包含置顶 删除 和取消 下面的是BaseDialog package com.free.csdn.view.dialog; import android.app.Dialo ...

  2. JAVA工作方式

    public class Hellow { int eyes = 2; int ears = 2; int legs = 4; void run(){ //方法 System.out.println( ...

  3. iphone判断当前网络连接类型

    eachability只能区分出无网络.wifi和wwan(2G&2.5G&3G)类型的网络连接类型,只需重构networkStatusForFlags方法,即可详细区分出2G与3G网 ...

  4. python建立pip.ini

    pip 是python的包管理器工具,类似linux的apt-get.yum包管理器,主要是用来进行安装python库, pip默认从官方源pypi.python.org下载数据,国内速度相对比较慢, ...

  5. Linux下进程的建立

    Linux下进程的建立 我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程来创建另外一个进程.这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使 ...

  6. 解决C#的64位打包程序,在64位机器上运行出现BadImageFormatException异常。

    转载自:http://msdn.microsoft.com/zh-cn/library/system.badimageformatexception%28v=vs.100%29.aspx BadIma ...

  7. 上位机控制led

    使用库函数,调试的结果在标红程序上,int main(void){  u8 a;                  u8 t;        u8 len;                u16 ti ...

  8. c++父类指针强制转为子类指针后的测试(帮助理解指针访问成员的本质)(反多态)

    看下面例子: #include "stdafx.h" #include <iostream> class A {  //父类 public: void  f()   / ...

  9. Ubuntu 14.10 下网络流量实时监控ifstat iftop命令详解

    ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstat eth0 eth1 KB/s in KB/s out KB/s in KB/s out 0 ...

  10. (转)iphone数据存储之-- Core Data的使用

    原文:http://www.cnblogs.com/xiaodao/archive/2012/10/08/2715477.html iphone数据存储之-- Core Data的使用(一)   一. ...