【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

假设T[i][j]表示的是杨辉三角第i层前j项的和。
会发现它同样满足杨辉三角的性质。

T[i][j] = T[i-1][j-1]+T[i-1][j] ····①
同时还有T[i][j] = T[i][j-1]+C[i][j] ····②
根据②式我们可以推出来①式的另外一种形式
T[i][j] = 2*T[i-1][j]-C[i-1][j] ···③
至此我们可以根据②③两式
用T[i][j]得到T[i-1][j],T[i+1][j],T[i][j-1],T[i][j+1]也即得到和它相邻的4个T的值。
考虑到给了我们n个询问。
我们可以考虑用莫队算法来搞。
做莫队之前先将询问分块。
m值为[1..sqrt(maxn)]的放在第1个vector中
m值为[sqrt(maxn)+1,sqrrt(maxn)*2]的放在第2个vector中
以此类推。
然后我们把这个maxn/sqrt(maxn)个块逐块处理。
每个块按照n值升序排。
这样我们在做莫队的时候。n值只会递增。
m值在sqrt(maxn)内波动。可以用上面得到的结论O(1)变化。
O(能过)

【代码】

#include <bits/stdc++.h>
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define lson l,mid,rt<<1
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define res(x) scanf("%s",x)
#define rson mid+1,r,rt<<1|1
using namespace std; const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int N = 1e5+10;
const ll MOD = 1e9+7; struct abc{
int n,m,id;
}a[N+10]; namespace COMB {
int F[N], Finv[N], inv[N]; //F是阶乘,Finv是逆元的阶乘
void init(){
inv[1] = 1;
for(int i = 2; i < N; i ++){
inv[i] = (MOD - MOD / i) * 1LL * inv[MOD % i] % MOD;
}
F[0] = Finv[0] = 1;
for(int i = 1; i < N; i ++){
F[i] = F[i-1] * 1LL * i % MOD;
Finv[i] = Finv[i-1] * 1LL * inv[i] % MOD;
}
}
ll comb(int n, int m){ //comb(n, m)就是C(n, m)
if(m < 0 || m > n) return 0;
return F[n] * 1LL * Finv[n - m] % MOD * Finv[m] % MOD;
} } bool cmp(abc a,abc b){
return a.n < b.n;
} ll ans[N+10];
int in[N+10];
vector<abc> kuai[N+10]; int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
COMB::init();
int T;
cin >> T;
for (int i = 1;i <= T;i++) {
cin >> a[i].n >> a[i].m;
a[i].id = i;
}
int kuai_len = sqrt(100000);
int cnt = 1;
for (int scnt = 1;scnt<=100000;scnt+=kuai_len,++cnt){
for (int j = scnt;j < scnt+kuai_len && j <=100000;j++){
in[j] = cnt;
}
}
cnt--; for (int i = 1;i <= T;i++){
int kuai_index = in[a[i].m];
kuai[kuai_index].push_back(a[i]);
}
for (int i = 1;i <= cnt;i++)
if ((int)kuai[i].size()>0){
sort(kuai[i].begin(),kuai[i].end(),cmp);
int nn = a[0].n,mm = -1;
ll cur = 0;
/*
T[n+1][m] = 2*cur-c[n][m];
T[n][m+1] = cur+c[n][m+1];
T[n][m-1] = cur-c[n][m];
*/
for (int j = 0;j < (int)kuai[i].size();j++){
while (nn<kuai[i][j].n){
cur = (2*cur%MOD-COMB::comb(nn,mm)+MOD)%MOD;
nn++;
}
while (mm<kuai[i][j].m){
cur = (cur + COMB::comb(nn,mm+1))%MOD;
mm++;
}
while (mm>kuai[i][j].m){
cur = (cur - COMB::comb(nn,mm)+MOD)%MOD;
mm--;
}
ans[kuai[i][j].id] = cur;
}
} for (int i = 1;i <= T;i++){
cout<<ans[i]<<endl;
}
return 0;
}

【hdu 6333】Harvest of Apples的更多相关文章

  1. 【hdu 6406】Taotao Picks Apples

    [链接] 我是链接,点我呀:) [题意] 题意相当于问你改变一个位置之后. 从左往右扫描最大值.这个最大值会改变多少次. [题解] 假设我们改变的是i这个位置,下面说的a[i]都是改成q之后的a[i] ...

  2. HDU - 6333:Harvest of Apples (组合数前缀和&莫队)

    There are n n apples on a tree, numbered from 1 1 to n n . Count the number of ways to pick at most ...

  3. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  4. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  5. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  6. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  7. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  8. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  9. 【hdu 1043】Eight

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...

随机推荐

  1. CodeForces 453A 概率题

    Description Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter ...

  2. Cloud Card是否能干掉App

    算下来有一年没写blog了.这一年算是潜心做一件事情,随着云OS 3.0已公布.总算能够向外界表达了我们想做个啥,非常多人也開始质疑,Cloud Card究竟是个啥?云OS 3.0算不算自主研发的OS ...

  3. 【cl】Red Hat Linux虚拟机安装Vmware Tools

    1.选择虚拟机,选中导航栏虚拟机>VMware Tool安装 选择右键>extract to 选择/home,新建了自己的文件夹,然后点击extract 一直enter,一直到 然后reb ...

  4. 【java项目实战】ThreadLocal封装Connection,实现同一线程共享资源

    线程安全一直是程序员们关注的焦点.多线程也一直是比較让人头疼的话题,想必大家以前也遇到过各种各种的问题.我就不再累述了.当然,解决方案也有非常多,这篇博文给大家提供一种非常好的解决线程安全问题的思路. ...

  5. Linux如何把以下文件夹修改为root权限?

    inux 修改文件目录所有者例:要将当前目录下名 title 的文件夹及其子文件的所有者改为geust组的su用户,方法如下:#chown -R su.geust title-R 递归式地改变指定目录 ...

  6. putty配色方案【转】

    本文转载自:http://blog.csdn.net/hfut_jf/article/details/53636080 putty默认的配色方案简直毫无人道主义可言,所以找了个,好多了,转载自http ...

  7. 0x5C 数位统计DP

    怎么说,数位DP还是我的噩梦啊,细节太恐怖了. 但是这章感觉又和之前的学的数位DP有差异?(应该是用DP预处理降低时间复杂度,好劲啊,不过以前都是记忆化搜索的应该不会差多少) poj3208 f[i] ...

  8. Spark MLlib介绍

    Spark MLlib介绍 Spark之所以在机器学习方面具有得天独厚的优势,有以下几点原因: (1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足 ...

  9. Java-Maven:POM百科

    ylbtech-Java-Maven:POM百科 Maven是以项目为中心的设计.POM(project object model)是Maven对一个单一项目的描述.没有POM的话,Maven是毫无用 ...

  10. Java:笔记-1

    ylbtech-Java:笔记-1 1.返回顶部 1. /** * 简介请求 * @return */ @RequestMapping("/JJ") public String j ...