AT3576 Popping Balls

好题!一种以前没怎么见过的思路!

%%ywy

以什么方式,什么位置统计本质不同的方案,才能不重不漏是处理所有计数问题的主心骨。

本题难以容斥。难以DP。

所以就尝试挖掘性质,考虑过程!

首先,红色什么时候都可以选,因为可以选择1

不妨给t定一个位置,先充分利用t,再用s,(如果s先用上了,那么t肯定就没意义了)

考虑每个方案是怎样构造出来的,归到合适的t的位置统计。

不妨直接按照“先拿了x个红的,再拿一个蓝的”为标准统计!

为了能涵盖所有之后的决策,让t位于A-(x-1)位置一定最优!让t拿走这个第一个蓝色

首先t肯定是[1,A+1]的

枚举这个位置t,拿走之后,剩下t-1个红色,B-1个蓝色球

现在,之后的连续B-1个球,红色和蓝色可以任意拿!

枚举拿i个红色,贡献C(B-1,i),剩下t-1-i个红色,i个蓝色

t已经废了。

考虑s放在哪里

同样的,枚举“再拿了y个红色,再拿一个蓝色”,

枚举这个位置s,拿走之后,剩下s-1个红色,i-1个蓝色

现在,之后的连续i-1个球,红色和蓝色可以任意拿!

枚举拿j个红色,贡献C(i-1,j),剩下若干红色,若干蓝色

s也废了

直接一口气拿完即可。

由于s和t的位置不能再优秀了,每种方案都一定会考虑到!

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);(fl==true)&&(x=-x);}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}
namespace Modulo{
const int mod=1e9+;
int ad(int x,int y){return (x+y)>=mod?x+y-mod:x+y;}
void inc(int &x,int y){x=ad(x,y);}
int mul(int x,int y){return (ll)x*y%mod;}
void inc2(int &x,int y){x=mul(x,y);}
int qm(int x,int y=mod-){int ret=;while(y){if(y&) ret=mul(x,ret);x=mul(x,x);y>>=;}return ret;}
}
using namespace Modulo;
namespace Miracle{
const int N=;
int A,B;
int f[N][N];
int C[N][N];
int main(){
rd(A);rd(B);
C[][]=;
int lim=max(A,B)+;
for(reg i=;i<=lim;++i){
C[i][]=;
for(reg j=;j<=i;++j){
C[i][j]=ad(C[i-][j],C[i-][j-]);
}
}
for(reg i=;i<=lim;++i){
for(reg s=;s<=lim;++s){
f[i][s]=ad(f[i][s-],C[i-][s-]);
}
for(reg s=;s<=lim;++s) f[i][s]=ad(f[i][s],f[i][s-]);
}
int ans=;
for(reg t=;t<=A+;++t){
for(reg i=;i<=t-;++i){
if(i!=) ans=ad(ans,mul(C[B-][i],f[i][t-i]));
else ans=ad(ans,);
}
}
ot(ans);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/

emm,首先发现红色随意拿,s,t为拿蓝色而生!先用t再用s,所以自然就考虑到第一个蓝色在哪里。所以考虑到t放在最优位置上更好。然后任意拿,s同上。

式子的化简就很暴力了其实。

有的时候一些计数题,不妨先枚举最前面一部分的构成,尽量早或者尽量优地进行一些决策来不重不漏涵盖情况,所谓字典序最小的位置统计

AT3576 Popping Balls的更多相关文章

  1. AT3576 E Popping Balls——计数思路

    题目:https://code-festival-2017-qualb.contest.atcoder.jp/tasks/code_festival_2017_qualb_e 题解:https://w ...

  2. Atcoder CODE FESTIVAL 2017 qual B E - Popping Balls 组合计数

    题目链接 题意 \(A+B\)个球排成一行,左边\(A\)个为红球,右边\(B\)个为蓝球. 最开始可以选择两个数\(s,t\),每次操作可以取左起第\(1\)或\(s\)或\(t\)个球.问有多少种 ...

  3. 【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数

    蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不 ...

  4. Code Festival 2017 Qual B E Popping Balls

    传送门 神仙计数! 我的计数真的好差啊= = 不过这个题真的神仙 看了题解把整个过程在草稿纸上重写了一遍才想明白= =(一张草稿纸就没有了!!!) 计数的关键就是在于 枚举的有效性和独立性[不能重复计 ...

  5. 一句话题解&&总结

    CF79D Password: 差分.两点取反,本质是匹配!最短路+状压DP 取反是套路,匹配是发现可以把操作进行目的化和阶段化,从而第二次转化问题. 且匹配不会影响别的位置答案 sequence 计 ...

  6. DP题组

    按照顺序来. Median Sum 大意: 给你一个集合,求其所有非空子集的权值的中位数. 某集合的权值即为其元素之和. 1 <= n <= 2000 解: 集合配对,每个集合都配对它的补 ...

  7. 【AtCoder】CODE FESTIVAL 2017 qual B

    最近不知道为啥被安利了饥荒,但是不能再玩物丧志了,不能颓了 饥荒真好玩 A - XXFESTIVAL CCFESTIVAL #include <bits/stdc++.h> #define ...

  8. CODE FESTIVAL 2017 qual B 题解

    失踪人口回归.撒花\^o^/ 说来真是惭愧,NOI之后就没怎么刷过题,就写了几道集训队作业题,打了几场比赛还烂的不行,atcoder至今是蓝名=.= 以后还是多更一些博客吧,我可不想清华集训的时候就退 ...

  9. Codeforces554 C Kyoya and Colored Balls

    C. Kyoya and Colored Balls Time Limit: 2000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d ...

随机推荐

  1. 图数据库-Neo4j-初探

    图数据库-Neo4j-初探 2018-08-17 本次初探主要学习如何安装Neo4j,以及Cypher的基本语法. 1. 安装Neo4j Desktop版本 neo4j-desktop Server版 ...

  2. Nopcommerce 项目添加插件

    插件是用来扩展nopCommerce功能的.nopCommerce拥有多种类型的插件.例如:支付方式(PayPal),税务机构,送货方式计算方法(UPS, USP, FedEx),小部件(如“在线聊天 ...

  3. 手机号码归属地查询API

    <?php function object_array($array){ if(is_object($array)){ $array = (array)$array; } if(is_array ...

  4. MongoDB查询操作 返回指定字段(C#官方驱动)

    首先,MongoDB中返回指定的字段的查询方法如下: db.person.find({Name:"小丑"},{Age:1,Sex:1}) 该语句表示:查询person表中name为 ...

  5. iOS UIControl 事件的说明(转)

    在控件事件中,简单解释下下面几个事件. 说明:由于是在“iOS 模拟器”中测试的,所以不能用手指,只能用鼠标. 1)UIControlEventTouchDown 指鼠标左键按下(注:只是“按下”)的 ...

  6. localStorage、sessionStorage和cookie的区别

    本地客户端(浏览器)查看三者信息: HTML4的本地存储:cookie 浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等根服务端进行数据交互. 一.co ...

  7. asp.net 代码片段的

    片段标签                                                   说明 <%                                      ...

  8. 解决No module named 'sklearn.cross_validation'

    sklearn中已经废弃cross_validation,将其中的内容整合到model_selection中 将sklearn.cross_validation 替换为 sklearn.model_s ...

  9. java——springmvc——注册中央调度器

    在WEB-INF下的web.xml中配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xm ...

  10. IntelliJ IDEA + Maven iml文件中依赖项的需求是什么?

    在Maven中,项目的依赖关系在pom.xml文件中指定.在IntelliJ IDEA中,即使对于Maven项目,相同的信息也存储在iml文件中.在两个地方有相同的信息需要什么? 当导入Maven项目 ...