AGC021E ball Eat chamelemons
E - Ball Eat Chameleons
设颜色序列中有\(R\)个红球,\(B\)个蓝球,且有\(B+R=k\)
然后分类讨论:
\(R<B\) 无解
\(R>B\)
这时有一种合法方案为:\(R-B\)只变色龙只用吃一个红球,剩下的\(n-(R-B)\)只变色龙吃的红球和蓝球的数量相等且最后吃的那个球是蓝球
对于\(n-(R-B)\)只变色龙,称它们为\(bsl\),有一种极端情况:若第\(i\)只变色龙要吃\(x_i\)个蓝球,\(x_i\)个红球,那么所有\(bsl\)一起先吃了对应的\(x_i-1\)个蓝球,再一起吃了对应的\(x_i\)个红球,最后再一起吃一个蓝球(这里的一起不是指的同时,而是指的这些操作都是相邻的)
这时,在操作期间,设当前所有变色龙吃了的红球数量为\(r\),蓝球数量为\(b\),那么有:
\]
所以,我们就可以将操作抽象为从\((0,0)\)开始,每次可以移动一个单位向量\((0,1)\)或\((1,0)\),求从\((0,0)\)移动到\((R,B)\)且不经过\(y=x+(R-n+1)\)的方案数
因为\(y=x+(R-n)\)是合法的,所以要\(+1\)
于是就是经典的翻折,答案为总方案数减去将终点关于直线对称后的新的终点的方案数
翻折:将不合法的方案中,第一次触碰到\(y=x+(R-n+1)\)及之后的折线全部关于\(y=x+(R-n+1)\)翻转,这样就得到了一条从\((0,0)\)到\((B-(R-n+1),R+(R-n+1))\)的路径
显然又所有的从\((0,0)\)到\((B-(R-n+1),R+(R-n+1))\)的路径都唯一对应了一条不合法的路径且任意一条不合法的路径都有对应的从\((0,0)\)到\((B-(R-n+1),R+(R-n+1))\)的路径
所以不合法的路径的方案数就是从\((0,0)\)到\((B-(R-n+1),R+(R-n+1))\)的路径的方案数
\]
将点\((a,b)\)关于直线\(y=x+T\)对称后的点为\((b-T,a+T)\)
- \(R=B\)
这时,所有的变色龙都吃了相等数量的红球和蓝球,且最后一个吃的是蓝球,所以这时的颜色序列的最后一个颜色一定为蓝色
所以,若我们去掉颜色序列的最后一个蓝球,就又变成了:\(k-1\)个球,且有\(R>B(R=B+1)\)
所以我们只需要枚举\(R\)即可
复杂度\(O(K)\)
#include<bits/stdc++.h>
using namespace std;
const int MOD=998244353,N=5e5+5;
int n,k,ans;
int jc[N],invf[N];
int power(int x,int y){
int ans=1;
for(;y;y>>=1,x=1ll*x*x%MOD) if(y&1) ans=1ll*ans*x%MOD;
return ans;
}
void Init(){
jc[0]=1;
for(int i=1;i<=k;++i) jc[i]=1ll*jc[i-1]*i%MOD;
invf[k]=power(jc[k],MOD-2);
for(int i=k-1;i>=0;--i) invf[i]=1ll*invf[i+1]*(i+1)%MOD;
}
int C(int n,int m){
if(m>n) return 0;
return 1ll*jc[n]*invf[n-m]%MOD*invf[m]%MOD;
}
int main(){
scanf("%d%d",&n,&k);
if(k<n) return printf("0"),0;
Init();
for(int r=k+1>>1,b;r<=k;++r){
b=k-r;
if(b==r) --b;
ans=(1ll*ans+((1ll*C(r+b,r)-1ll*C(r+b,(r<<1)-n+1))%MOD+MOD)%MOD)%MOD;
}
printf("%d",ans);
return 0;
}
AGC021E ball Eat chamelemons的更多相关文章
- 「AGC021E」Ball Eat Chameleons
「AGC021E」Ball Eat Chameleons 考虑如何判定一个合法的颜色序列. 不妨设颜色序列中有 \(R\) 个红球,\(B\) 个蓝球,所以有 \(R+B=k\). 考虑分情况讨论: ...
- 【AtCoder】AGC021
A - Digit Sum 2 从高位到低位数的第i位以前前缀都相同,第i位比当前位上的数小1的情况下,后面都填9 枚举一下然后计算最大的就好 #include <bits/stdc++.h&g ...
- AtCoder Grand Contest 021
A - Digit Sum 2 Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement Find t ...
- Python100天打卡-Day10-图形用户界面和游戏开发
基于tkinter模块的GUIPython默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter)使用tkinter来开发GUI应用需要以下5个步骤: 导入tkinte ...
- Python-Day07-图形用户界面和游戏开发
Python-100Day-学习打卡Author: Seven_0507Date: 2019-05-22123 文章目录Python图形用户界面和游戏开发1. tkinter模块2. Pygame进行 ...
- Day10 图形用户界面和游戏开发
基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述.Python默认的GUI开发模块是tkinter(在Python 3 ...
- AtCoder Grand Contest 021完整题解
提示:如果公式挂了请多刷新几次,MathJex的公式渲染速度并不是那么理想. 总的来说,还是自己太弱了啊.只做了T1,还WA了两发.今天还有一场CodeForces,晚上0点qwq... 题解还是要好 ...
- Typescript基础(4)——接口
前言 今天继续typescript的学习,开始ts接口部分的学习. 接口 接口的理解 首先,我们谈论一下现实生活中的接口.比如生活中常用的插座接口,有些插头是三孔插座的,有些是两孔插座的.插座接口规定 ...
- Python100天打卡-Day10
实现动画效果要实现动画效果,本身的原理也非常简单,就是将不连续的图片连续的播放,只要每秒钟达到了一定的帧数,那么就可以做出比较流畅的动画效果.import pygame def main(): # 初 ...
- awsl
from enum import Enum, uniquefrom math import sqrtfrom random import randint import pygame @uniquecl ...
随机推荐
- docx4j转换HTML并生成word文档实践
一.背景 在项目开发中,有一个需求需要将富文本编辑器中的内容转换为word文档.在网上看了很多开源第三方工具包的对比,最终选择了docx4j,主要原因有一下几点: 可以将html转换为word 对wo ...
- 基于DotNetty实现自动发布 - 背景篇
故事背景 小公司,单体项目,接口和页面都在一起,生产和测试环境都是 Windows 服务器和 IIS, 本地编译完成,把相关的页面和程序集拷贝到服务器上,尤其是涉及到多个页面,一个个页面找到对应的位置 ...
- 【Web】前端框架对微软老旧浏览器的支持
零.原因 最近要做一个项目,要能在学校机房运行的,也要在手机上运行.电脑和手机,一次性开发,那最好的就是响应式前端框架了.手机和正常的电脑兼容性问题应该都不大,但是学校机房都是Win7的系统,自带的都 ...
- sql server2008出现set 选项的设置不正确:"ARITHABORT”
( SELECT STUFF(( SELECT '','' + CODE FROM INVNEWSAL11 WHERE (MASTERI=BILRCV.SRCERI) OR (LINKERI IN ( ...
- 牛客小白月赛104 C-小红打怪
小红打怪 答案有单调性,使用二分答案来做 但是当时没有想到用二分,而是卡在怎么处理这三种攻击了. 可以把进行x回合的攻击,分为先进行x回合的全体打击,再进行x回合的范围打击,最后验证剩余血量够不够x回 ...
- grequests,并发执行接口请求的方法(简易版)
有时候需要处理很多请求,显然,一个一个去处理是要花费很多时间的 我们就需要用到并发的方式,python并发请求的方法很多,从简单到复杂. 本案例,介绍一个超级简单,使用grequests库,实现并发请 ...
- DPDI(Dispatch PDI)kettle调度管理平台之实操演练第003讲-数据通途:客户端连接SQL Server的完美攻略
SQL Server简介 基本概念 SQL Server是由微软公司开发的关系型数据库管理系统.它基于SQL(Structured Query Language,结构化查询语言)来管理和操作数据.SQ ...
- cesium裁切面实践
cesium裁切面实践:沙盒地址 (打不开的自行科学访问) 裁切面法线方向指向保留的部分,本案例通过法线配合unionClippingRegions参数实现相比官方案例没有的:多裁切面互裁,裁两边留中 ...
- 跨境电商 | 踏浪出海:我的Allegro跨境电商实战全景
作者:追梦1819 (同名公众号),本职:高级软件工程师:副业:Allegro跨境电商.运营同名公众号(左上二维码),专注分享成长.跨境电商经历与经验. 版权声明:本文为博主原创文章,转载请附上博文链 ...
- 漏洞预警 | Ivanti Connect Secure栈溢出漏洞
0x00 漏洞编号 CVE-2025-0282 0x01 危险等级 高危 0x02 漏洞概述 Ivanti Connect Secure是一款远程访问和零信任安全解决方案,它提供了SSL VPN功能, ...