标签:style blog http color os io for 数据 2014
今天陈泽宇又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格。但要满足如下的两个条件:
(1)任意两个单元格都不在同一行。
(2)任意两个单元格都不在同一列。
选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|)。狗狗想知道的是,花费在minT到maxT之间的方案数有多少。
答案模1000000007。所谓的两种不同方案是指:只要它选中的单元格有一个不同,就认为是不同的方案。
一行,4个整数,R、C、minT、maxT。3≤R,C≤4000, 1≤minT≤maxT≤20000。
对于30%的数据, 3 ≤ R, C ≤ 70。
一个整数,表示不同的选择方案数量模1000000007后的结果。
输入样例 |
3 3 1 20000
|
3 3 4 7
|
4 6 9 12 |
7 5 13 18
|
4000 4000 4000 14000 |
输出样例 |
6 |
0 |
264 |
1212 |
859690013
|
我会说我还没有思路吗。。。基本是背hzwer黄巨大的代码的。。。
明天进去听黄巨大再解释一下,然后再写吧
#include<iostream> #include<cstdlib> #include<cstdio> #define mod 1000000007 using namespace std; long long ans=0; int t1[10001]; int t2[10001]; int R,C,minT,maxT; int main() { freopen("excel.in","r",stdin); freopen("excel.out","w",stdout); cin>>R>>C>>minT>>maxT; for (int i=1;i<=R;i++) t1[i]=(R-i)*(i-1); for (int j=1;j<=C;j++) t2[j]=(C-j)*(j-1); for (int i=1;i<=R;i++) for (int j=1;j<=C;j++) { if ( ( (2*(i+j))>=minT ) && ( (2*(i+j))<=maxT ) ) { ans=(ans+ ((long long)t1[i]*t2[j]*6)%mod )%mod; } } cout<<ans; return 0; }
用时这么久我也是服了。。。同一个代码为什么黄巨大交就是两秒多,我交就是四秒多呢?一定是黄巨大rp比我高。。。(/自卑)
标签:style blog http color os io for 数据 2014
原文地址:http://www.cnblogs.com/seekdreamer/p/3961854.html