首页 > 其他分享 >AtCoder Beginner Contest 266 G,H

AtCoder Beginner Contest 266 G,H

时间:2022-08-31 09:33:18浏览次数:63  
标签:AtCoder return Beginner int ret 266 fac dp mod

G
考虑先放GB,此时共有\(C_{G+B}^{B}\)种方案。

然后选出\(k\)个G,在前面放上\(R\),共有\(C_{G}^{k}\)种方案。

最后我们放剩下的\(R-K\)个R,考虑目前哪些区间内部可以放一段连续的\(R\)。可以发现,单独G的后面,以及B的前后,RG的前后是可以放的,总共是\(B-k+1\)个区间内可以放\(R\)。那么此时就是一个经典的问题——给你\(N\)个桶和\(M\)个球,每个桶可以放任意多个球,球是无标号的,求总方案数。用隔板法发现答案就是\(C_{N-1}^{N+M-1}\)。

最后将这些乘起来就可以得到总方案数了。

#include<bits/stdc++.h>
#define debug(...) std::cerr<<#__VA_ARGS__<<" : "<<__VA_ARGS__<<std::endl

const int maxn=3000005,mod=998244353;
int r,g,b,k;
int fac[maxn];

int qpow(int x,int y) {
	if(y==0) return 1;
	int ret=qpow(x,y>>1);
	ret=1ll*ret*ret%mod;
	if(y&1) ret=1ll*ret*x%mod;
	return ret;
}

int C(int x,int y) {
	return 1ll*fac[x]*qpow(fac[y],mod-2)%mod*qpow(fac[x-y],mod-2)%mod;
}

int D(int x,int y) {
	return C(x+y-1,x-1);
}

int main() {
	fac[0]=1; for(int i=1;i<maxn;i++) fac[i]=1ll*fac[i-1]*i%mod;
	scanf("%d%d%d%d",&r,&g,&b,&k);
	printf("%d\n",(int)(1ll*C(g+b,b)*C(g,k)%mod*D(k+b+1,r-k)%mod));
	return 0;
}

H
我们发现很多坐标是没用的,准确的说,是只有出发点\((0,0)\)、每个snuke出现的点\((x_{i},y_{i})\)只在\(t_{i}\)时刻是有用的。

那么设\(dp(i)\)表示到了第\(i\)个点,且目前时间是\(t_{i}\),我们得到最大Size的和。

不妨设\(dp(0)\)表示在初始点,并且\(x_{0}=y_{0}=t_{0}=a_{0}=0\)。

那么\(dp(j)\)能转移到\(dp(i)\),当且仅当\(y_{i}\geq y_{j},y_{i}-y_{j}+|x_{i}-x_{j}|\leq t_{i}-t_{j}\)。

转移方程式就是\(dp(i)=\max_{y_{i}\geq y_{j},y_{i}-y_{j}+|x_{i}-x_{j}|\leq t_{i}-t_{j}}(dp(j))+a_{i}\)

标签:AtCoder,return,Beginner,int,ret,266,fac,dp,mod
From: https://www.cnblogs.com/Nastia/p/16641835.html

相关文章

  • 使用ESP8266nodeMCU 向微信推送模板数据
    使用HTTPS协议向微信公众号推送消息,(使用ESP8266的低成本实现)前几天被朋友问到这个东西的实现方式,花了一下午时间研究一下,特此记录。没有排版比较乱。      ......
  • AtCoder Beginner Contest 266 一句话题解
    AandBsbt,不讲。C垃圾计算几何,问是不是一个凸包,搞份板子交就可以了。D简单dp,令\(f(i,j)\)表示第\(i\)个时间在第\(j\)个位置的最大价值,从上一个时间转移,可以......
  • ABC266 Ex - Snuke Panic (2D)
    ABC266Ex-SnukePanic(2D)挺好的一道题(不过调了好久QAQ方法一比较暴力的做法。首先,你容易想到一个DP状态:\(f(t,x,y)\)表示在\(t\)时刻到达\((x,y)\)的最......
  • AtCoder Beginner Contest 266
    比赛链接:https://atcoder.jp/contests/abc266C-ConvexQuadrilateral题意:平面图上有一个四边形,按照逆时针顺序给定四个点的坐标,判断四边形是不是凸的。思路:求两条......
  • AtCoder Beginner Contest 179
    https://atcoder.jp/contests/abc179我的AC代码https://atcoder.jp/contests/abc179/submissions/me?f.Task=&f.LanguageName=&f.Status=AC&f.User=HinanawiTenshi这......
  • AtCoder Beginner Contest 265(D-E)
    D-IrohaandHaiku(NewABCEdition)题意:找一个最少含有三个点的区间,将区间分成三块,三块的和分别为p,q,r,问是否存在这样的区间题解:先预处理一遍前缀和,和每一个前缀......
  • ABC266.
    D设\(f_{t,p}\)代表在\(t\)时间点时人在\(p\)点的最大收益,在这一步他可以\(p\)增加,不动,\(p\)减少。于是得出状态转移方程:\(f_{t,p}=\max(f_{t-1,p-1},f_{t-1,......
  • ABC266 做题笔记
    AProblem给定一个字符串,输出正中间那个字符。link->https://atcoder.jp/contests/abc266/tasks/abc266_a。Solution简单题。Code点击查看代码#include<bits/stdc+......
  • [Atcoder]ABC266题解
    C-ConvexQuadrilateral计算几何给定平面内四个点,要求判断它们组成的四边形是否是凸四边形法一:凸四边形的两条对角线将其分成两个三角形分成的两个三角形面积相加......
  • CTFSHOW Web266
    highlight_file(__FILE__);include('flag.php');$cs=file_get_contents('php://input');classctfshow{public$username='xxxxxx';public$password='xxxxxx'......