暑假训练-藏妹子之处(递推)

【题目描述】:

今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格。但要满足如下的两个条件:

  1. 任意两个单元格都不在同一行。
  2. 任意两个单元格都不在同一列。

选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|)。狗狗想知道的是,花费在minT到maxT之间的方案数有多少。

答案模1000000007。所谓的两种不同方案是指:只要它选中的单元格有一个不同,就认为是不同的方案。

【输入描述】:

一行,4个整数,R、C、minT、maxT。

【输出描述】:

一个整数,表示不同的选择方案数量模1000000007后的结果。

【样例输入1】:

3 3 1 20000

【样例输出1】:

6

【样例输入2】:

3 3 4 7

【样例输出2】:

0

【样例输入3】:

4 6 9 12

【样例输出3】:

264

【样例输入4】:

7 5 13 18

【样例输出4】:

1212

【样例输入5】:

4000 4000 4000 14000

【样例输出5】:

859690013

【时间限制、数据范围及描述】:

时间:1s 空间:128M

对于 30%的数据: 3<=R,C<=70。

对于100%的数据: 3<=R,C<=4000, 1<=minT<=maxT<=20000。

很容易发现发现对于三个点(x1,y1)(x2,y2)(x3,y3),如果任意交换坐标费用不变,所以题意变为枚举3个横坐标和3个纵坐标,算合理的方案数

对于x1,x2,x3 , y1,y2,y3,若有x1<x2<x3 , y1<y2<y3,则方案的费用是2(x3-x1)+2(y3-y1)。

所以,不妨令x1<x2<x3 , y1<y2<y3,则由排列组合易得,最后方案数乘6即为答案。

而(x1,y1)和(x3,y3)构成一个矩形,对于一个确定的矩形边框,它的费用是一定的,即2(x3-x1)+2(y3-y1),也就是矩形的边长。它对答案的贡献也是一定的,即(x3-x1-1)*(y3-y1-1)。这个矩形在r*c的大矩形中出现的次数也是给定的,设矩形长为x,宽为y,则出现了(r-x+1)*(c-y+1)次。那么直接枚举矩形的边长,然后就可以算出答案。

时间复杂度为O(n^2)

答案数×6是因为x不变y交换,全排列P(3,2)

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4 const int mod=1000000007;
 5 LL ans;
 6 LL r,c,mn,mx;
 7 int main(){
 8     freopen ("excel.in","r",stdin);
 9     freopen ("excel.out","w",stdout);
10     int i,j,d;
11     scanf("%lld%lld%lld%lld",&r,&c,&mn,&mx);
12     for (i=3;i<=r;i++){
13         for (j=3;j<=c;j++){
14             d=2*((i-1)+(j-1));
15             if (d>=mn && d<=mx)
16                 ans=(ans+(i-2)*(j-2)%mod*(r-i+1)%mod*(c-j+1)%mod*6%mod)%mod;
17         }
18     }
19     printf("%lld",ans);
20     return 0;
21 }22
时间: 2024-12-11 01:17:11

暑假训练-藏妹子之处(递推)的相关文章

藏妹子之处(excel)(C++) 密码:无

收 藏   藏妹子之处(excel) 难度级别:C: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件:(1)任意两个单元格都不在同一行.(2)任意两个单元格都不在同一列.选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x

2017.2.10测试 藏妹子之处

第二题  藏妹子之处(excel) 问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同一行. (2)任意两个单元格都不在同一列. 选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|).狗狗想知道的是,花费在minT到maxT之间的方案数有多少. 答案模1000

藏妹子之处(excel)(C++)

收 藏   藏妹子之处(excel) 难度级别:C: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件:(1)任意两个单元格都不在同一行.(2)任意两个单元格都不在同一列.选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x

17.2.10 NOIP模拟赛 藏妹子之处(excel)

藏妹子之处(excel) 问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同一行. (2)任意两个单元格都不在同一列. 选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|).狗狗想知道的是,花费在minT到maxT之间的方案数有多少. 答案模100000000

【乱搞】【中等难度】noip模拟赛 藏妹子之处

藏妹子之处(excel) 问题描述: 今天陈泽宇又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同一行. (2)任意两个单元格都不在同一列. 选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|).狗狗想知道的是,花费在minT到maxT之间的方案数有多少. 答案模100000000

藏妹子之处(excel)

问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同一行. (2)任意两个单元格都不在同一列. 选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|).狗狗想知道的是,花费在minT到maxT之间的方案数有多少. 答案模1000000007.所谓的两种不同方案是指

【NOIP模拟赛】藏妹子之处

问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同一行. (2)任意两个单元格都不在同一列. 选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|).狗狗想知道的是,花费在minT到maxT之间的方案数有多少. 答案模1000000007.所谓的两种不同方案是指

暑假集训(4)第三弹 -----递推(Hdu1799)

问题描述:还记得正在努力脱团的小A吗?在他绘制贤者法阵时,他曾经最亲密的战友,暗中设下鬼打墙将小A围困,并准备破坏 小A正在绘制的法阵.小A非常着急.想阻止他的行动.而要阻止他,必须先破解鬼打墙. 哎,你不得不再次帮助他,告诉他在鬼打墙内应该走多少步.才能打破所有for循环. 问题分析:可以利用杨辉三角:1 1    1 1     2    1 1     3     3    1 1     4     6    4   1 ........ 1    a[i-1][j]+a[i-1][j]

算法竞赛入门经典训练指南【递推问题】------2015年1月24日

1. 常见的数列总结 (1)斐波那契数列: 如何实现斐波那契数列,我们可以采取如下方法: (1)递归求解(慢)(2)递推法 (3)矩阵快速幂 下面给出矩阵快速幂的由来: 除了这些问题,我们对于斐波那契数列还可能涉及高精度数的处理问题. (2)卡特兰数 卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项公式为                       另类递归式:  h(n)=((4*n-2)/(n+1)