zoukankan      html  css  js  c++  java
  • 藏妹子之处(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

    做法很简单,找规律即可。

    大概做了一个小时,正常耗时。

    代码实现:

     1 #include<cstdio>
     2 #include<iostream>
     3 #define mod 1000000007
     4 using namespace std;
     5 long long n,m,l,r,ans;
     6 long long a[8010],b[8010];
     7 int main(){
     8     freopen("excel.in","r",stdin);
     9     freopen("excel.out","w",stdout);
    10     cin>>n>>m>>l>>r;
    11     a[4]=n-2;a[6]=n*2-6;
    12     for(int i=8;i<=n*2-2;i+=2) a[i]=a[i-2]*2-a[i-4]-2;
    13     b[4]=m-2;b[6]=m*2-6;
    14     for(int i=8;i<=m*2-2;i+=2) b[i]=b[i-2]*2-b[i-4]-2;
    15     for(int i=4;i<=n*2-2;i+=2)
    16     for(int j=4;j<=m*2-2;j+=2)
    17     if(i+j>=l&&i+j<=r) ans+=a[i]*b[j],ans%=mod;
    18     cout<<ans*6%mod<<endl;
    19     return 0;
    20 }

    本题我的方法应该不是正统的正解,正解应该是根据九宫格的特点推广。

  • 相关阅读:
    软考下午题具体解释---数据流图设计
    透视表提取不反复记录(4)-每一个物品的最大值
    运用python抓取博客园首页的所有数据,而且定时持续抓取新公布的内容存入mongodb中
    [经验总结]material design效果与开发总结
    cocos2d-x 3.0 回调函数
    P1334 瑞瑞的木板
    P2776 [SDOI2007]小组队列
    P1886 滑动窗口
    P1160 队列安排
    P1823 音乐会的等待
  • 原文地址:https://www.cnblogs.com/J-william/p/6391889.html
Copyright © 2011-2022 走看看