2017.2.10测试 藏妹子之处

Posted Soda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017.2.10测试 藏妹子之处相关的知识,希望对你有一定的参考价值。

第二题  藏妹子之处(excel

问题描述:

今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个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

 

思路:

这题很难,上网上看了题解才明白,大体思路是: (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)次。那么枚举矩形的边长,然后就算出答案。(我觉得没说明白。)

#include<iostream>
using namespace std;
int r,c,mint,maxt;
int main(){
    cin>>r>>c>>mint>>maxt;
    long long ans=0;
    for(int i=3;i<=r;i++){
        for(int j=3;j<=c;j++){//枚举矩形的长和宽 
            int k=(i+j-2)*2;
            if(k<=maxt&&k>=mint)
            ans+=(long long)(r-i+1)*(c-j+1)*(i-2)*(j-2)%1000000007;
        }
    }
    ans=(ans*6)%1000000007;
    cout<<ans;
}

 

以上是关于2017.2.10测试 藏妹子之处的主要内容,如果未能解决你的问题,请参考以下文章

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

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

2017清北精英班整理内容掌握考试题

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段

如何做程序员喜欢的测试妹子?

[NowCoder] 藏宝图