[JZOJ5358]【NOIP2017提高A组模拟9.12】BBQ
2017-09-13 22:43
459 查看
Description
给出a,b,n求∑i=1n∑j=1i−1Cai+ajai+aj+bi+bj
答案对1e9+7取模
Solution
转化一下。Caa+b就是在网格图中,只能向右和上走,(0,0)到(a,b)的方案数。
那就是(0,0)到(ai+aj,bi+bj)
尽量将i,j分开独立考虑
可以将点平移
等于(−ai,−bi)到(aj,bj)的方案数。
那直接在网格图上(−ai,−bi)+1,全部点加完以后一起递推,在所有(aj,bj)处统计答案
最后将自己到自己减掉,除个2就行。
Code
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <cstdlib> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fod(i,a,b) for(int i=a;i>=b;i--) #define mo 1000000007 #define LL long long #define M 2005 #define N 200005 using namespace std; LL f[2*M][2*M],js[4*M],ans; int n,a ,b ; LL ksm(LL k,LL n) { LL s=1; for(;n;n>>=1,k=k*k%mo) if(n&1) (s*=k)%=mo; return s; } LL zh(LL m,LL n) { return(js *ksm(js[m],mo-2)%mo*ksm(js[n-m],mo-2)); } int main() { cin>>n; js[0]=1; fo(i,1,8000) js[i]=(js[i-1]*(LL)i)%mo; ans=0; fo(i,1,n) scanf("%d%d",&a[i],&b[i]),(ans-=zh(2*a[i],2*a[i]+2*b[i]))%=mo,f[2000-a[i]][2000-b[i]]++; fo(i,0,4000) { fo(j,0,4000) { if(i) (f[i][j]+=f[i-1][j])%=mo; if(j) (f[i][j]+=f[i][j-1])%=mo; } } fo(i,1,n) (ans=ans+f[a[i]+2000][b[i]+2000])%=mo; (ans*=ksm(2,mo-2))%=mo; printf("%lld\n",ans); }
相关文章推荐
- JZOJ5358. 【NOIP2017提高A组模拟9.12】BBQ
- 【jzoj5358】【NOIP2017提高A组模拟9.12】【BBQ】
- JZOJ5358. 【NOIP2017提高A组模拟9.12】BBQ
- 【JZOJ 5358】【NOIP2017提高A组模拟9.12】BBQ
- 5358. 【NOIP2017提高A组模拟9.12】BBQ
- 【jzoj5360】【NOIP2017提高A组模拟9.12】【Shorten Diameter】
- 【jzoj5359】【NOIP2017提高A组模拟9.12】【Arrays and Palindrome】
- JZOJ5358【NOIP2017提高A组模拟9.12】BBQ
- JZOJ5360. 【NOIP2017提高A组模拟9.12】Shorten Diameter
- JZOJ5354. 【NOIP2017提高A组模拟9.9】导弹拦截
- [JZOJ5402]【NOIP2017提高A组模拟10.8】God Knows (口胡)
- 【JZOJ4932】【NOIP2017提高组模拟12.24】B
- JZOJ 5172. 【NOIP2017提高组模拟6.27】lllegal Motor
- JZOJ 5376. 【NOIP2017提高A组模拟9.19】Candy
- JZOJ5379. 【NOIP2017提高A组模拟9.21】Victor爱数字
- JZOJ 5384. 【NOIP2017提高A组模拟9.23】四维世界
- JZOJ 5396. 【NOIP2017提高A组模拟10.6】Blocks
- JZOJ 5398. 【NOIP2017提高A组模拟10.7】Adore
- JZOJ5399. 【NOIP2017提高A组模拟10.7】Confess bitset
- JZOJ 5182. 【NOIP2017提高组模拟6.29】码灵鼠