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

【题意】

在这里输入题意

【题解】

假设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. Makefileeasy犯错的语法

    1.引言 近期学习android的Build系统,接触最多的自然就是Makefile语法.发现非常多easy出错的地方,不避开这些错误语法没法真正了解Makefile的内涵.以下就介绍遇到的一些让人困 ...

  2. eclipse中打字中文突然变成繁体

    eclipse中打字中文突然变成繁体 在用eclipse做android项目的时候,发现打出来的字全部是繁体,而且QQ等其他位置又是简体. 原因:eclipse的快捷点ctrl+alt+f(forma ...

  3. 深度学习将会变革NLP中的中文分词——TODO 待好好细看

    见:https://www.leiphone.com/news/201608/IWvc75oJglAIsDvJ.html TODO 待好好细看

  4. 深入Session

    早上考虑Spring MVC和Structs2项目共用时看到一个问题,如何保持session一致?Session是怎么样被服务器处理的呢,Spring MVC中是如何封装处理Session并在不同请求 ...

  5. mysql 强制修改密码

    mysql忘记密码时强制修改步骤如下: 1.用命令编辑配置文件/etc/my.cnf 2.添加一条语句使其变为不用密码就能进入的状态 skip-grant-tables 3.保存并退出,然后再命令行输 ...

  6. vue插件 vue-seamless-scroll 无缝滚动插件ES6使用总结

    最近因为需求需要写一个项目信息无缝向上滚动组件,在网上搜了一下,看到大家的一致好评就果断的使用了vue-seamless-scroll组件.下面就简单的介绍它的使用,具体详细的使用推荐大家去看下开发者 ...

  7. NOIP2013T1 转圈游戏 快速幂

    描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, --, 依此 ...

  8. LeetCode Weekly Contest 24

    1, 543. Diameter of Binary Tree 维护左右子树的高度,同时更新结果,返回以该节点结束的最大长度.递归调用. /** * Definition for a binary t ...

  9. DDL:对数据库___database___的相关操作,包含数据库备份,导入

    1.创建数据库 create database mydb2; create database mydb2 character set utf8; 2.删除数据库 drop database mydb2 ...

  10. 如何使用fetch

    Fetch API  提供了一个 JavaScript接口,用于访问和操纵HTTP管道的部分,例如请求和响应.它还提供了一个全局fetch()方法,该方法提供了一种简单,合乎逻辑的方式来跨网络异步获取 ...