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. vue.js devtools图标不亮

    第一步:打开谷歌扩展程序 第二步:设置允许访问文件地址

  2. 关于一些JS的运算符

    首先呢,什么是JavaScript:JavaScript是一种脚本语言,也是一种解释型语言,更是一种由数据值决定变量类型的弱类型语言 JavaScript主要由三部分组成 ECMAScript  这个 ...

  3. .NET webapi 的单元测试

    public abstract class MirAPIUnitTestCommon { public abstract string GetBaseAddress(); /// <summar ...

  4. 一个简单的例子学会github repository的webhook

    github的webhook是个有用的功能,允许开发人员指定一个服务器的url.当开发者对github仓库施加操作,比如提交代码,创建issue时,github网站会自动向该url指定的服务器推送事件 ...

  5. 安全开发Java动态代理

    关于安全开发的一些思考 之前面试某宝的时候,某人问过我,如果解决开发不懂安全的问题,就比如说SSRF,XEE这样的漏洞,如果一旦发生,应该如果立刻去响应,并帮助开发人员修复漏洞,难道写一个jar包?然 ...

  6. ASP.NET 静态化

    以前也说过页面静态化   但是说的好像不清楚 这次我用一个插件 URLRewriter  重写URL 先引用dll 然后再web.config中三步走 <configSections> & ...

  7. 图像处理---《Mat对象 与 IplImage对象》

    图像处理---<认识 Mat对象> Mat对象 与 IplImage对象 (1)Mat对象:OpenCV2.0之后引进的图像数据结构.自动分配内存.不存在内存泄漏的问题,是面向对象的数据结 ...

  8. css网页使用自定义字体方法

    @font-face可以加载服务器端的字体到浏览器端,这样设计师就可以不受客户端字体库的限制. 一般来说有四种格式的字体文件即可覆盖所有浏览器.这四种格式为: .EOT:适用于Internet Exp ...

  9. zencart单独屏蔽左右边栏代码

    1.屏蔽左栏:打开模板目录下的tpl_main_page.php文件,找到以下代码 if (!isset($flag_disable_left) || !$flag_disable_left) { 在 ...

  10. 05—动态sql

    1.创建表 CREATE TABLE tb_employee ( ID INT(11) PRIMARY KEY AUTO_INCREMENT, loginname VARCHAR(18), PASSW ...