传送门

好妙的题啊

首先容易想到简单容斥,统计合法方案数可以考虑总方案数减去不合法方案数

那么先考虑如何判断一个串是否合法,但是直接判断好像很不好搞

这时候就需要一些 $magic$ 了,把所有位置下标为奇数的字符 $\text{A}$ 换成 $\text{B}$ ,$\text{B}$ 换成 $\text{A}$

然后发现对于转化后的串,原本的限制变成了不能删除 $AA$ 和 $BB$ ,考虑到原串和新串是一一对应的

所以如果能算出合法新串的数量那么即为答案

然后容易发现,新串合法的充分必要条件为:字符 $A$ 和字符 $B$ 数量的最大值不超过 $n/2$

首先显然是必要的,因为如果某一个字符 $c$ 数量超过一半其他的字符不管怎么和 $c$ 抵消最后都会剩下一些 $c$ 没法消除

然后也容易证明是充分的,对于任意时刻,假设此时 $A$ 的数量大于等于 $B$ 的数量,那么我们只要优先让 $A$ 和其他字符抵消

显然一定存在某个 $A$ 它的旁边有其他字符

如果 $B$ 的数量比 $A$ 多,我们也只要优先消 $B$ 即可

那么证明完成了,统计不合法方案十分简单,枚举 $k>n/2$ ,然后算一下 $n$ 个位置任意选 $k$ 个填 $A$ ,剩下其他位置填不为 $A$ 的字符的方案数

$B$ 也同理,然后就做完了

这里简单容斥的时候显然不用再加上 $A,B$ 数量同时大于 $n/2$ 的情况(因为不存在)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e7+,mo=;
inline int fk(int x) { return x>=mo ? x-mo : x; }
int n,fac[N],facinv[N];
int ksm(int x,int y)
{
int res=;
while(y) { if(y&) res=1ll*res*x%mo; x=1ll*x*x%mo; y>>=; }
return res;
}
inline int C(int x,int y) { return 1ll*fac[x]*facinv[y]%mo*facinv[x-y]%mo; }
int main()
{
n=read();
fac[]=;
for(int i=;i<=n;i++) fac[i]=1ll*fac[i-]*i%mo;
facinv[n]=ksm(fac[n],mo-);
for(int i=n-;i>=;i--) facinv[i]=1ll*facinv[i+]*(i+)%mo;
int ans=ksm(,n);
for(int k=n/+;k<=n;k++)
ans=fk(ans-2ll*C(n,k)*ksm(,n-k)%mo+mo);
printf("%d\n",ans);
return ;
}

AtCoder Grand Contest 040 C - Neither AB nor BA的更多相关文章

  1. 【AtCoder】AtCoder Grand Contest 040 解题报告

    点此进入比赛 \(A\):><(点此看题面) 大致题意: 给你一个长度为\(n-1\).由\(<\)和\(>\)组成的的字符串,第\(i\)位的字符表示第\(i\)个数和第\( ...

  2. AtCoder Grand Contest 040

    Preface 今年准备省选啥都不说了,省选题基本上都做过一遍了,开始尝试板刷AGC 这场做完就从AGC001开始吧,感觉以我的速度和来机房的频率一个礼拜做一场都谢天谢地了 A - >< ...

  3. AtCoder Grand Contest 040 简要题解

    从这里开始 比赛目录 A < B < E < D < C = F,心情简单.jpg. Problem A >< 把峰谷都设成 0. Code #include &l ...

  4. AtCoder Grand Contest 040 B - Two Contests

    传送门 一看就感觉很贪心 考虑左端点最右的区间 $p$ 和右端点最左的区间 $q$ 如果 $p,q$ 属于同一个集合(设为 $S$,另一个集合设为 $T$),那么其他的区间不管是不是在 $S$ 都不会 ...

  5. AtCoder Grand Contest 040 A - ><

    传送门 对于某个位置,只要知道这个位置往左最多的连续 $\text{<}$ 的数量 $x$ 和往右最多的连续 $\text{>}$ 的数量 $y$ 那么这个位置最小可能的数即为 $max( ...

  6. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

  7. AtCoder Grand Contest 006

    AtCoder Grand Contest 006 吐槽 这套题要改个名字,叫神仙结论题大赛 A - Prefix and Suffix 翻译 给定两个串,求满足前缀是\(S\),后缀是\(T\),并 ...

  8. AtCoder Grand Contest 012

    AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...

  9. AtCoder Grand Contest 011

    AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...

随机推荐

  1. LeetCode31 Next Permutation and LeetCode60 Permutation Sequence

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  2. 20165223《网络对抗技术》Exp7 网络欺诈防范

    目录 -- 网络欺诈防范 实践说明 实践目标 基础知识问答 实验工具学习 实践内容 简单应用SET工具建立冒名网站 ettercap DNS spoof 结合应用两种技术,用DNS spoof引导特定 ...

  3. ubuntu虚拟机安装及vim配置问题(转载)

    virtual box虚拟机Ubuntu系统安装及共享文件夹建立 https://blog.csdn.net/qq_27905767/article/details/82106753 Linux超全v ...

  4. RVS PA-1800 功放参数

        RVS PA-1800大功率功放技术参数:     文章来源:外星人来地球 欢迎关注,有问题一起学习欢迎留言.评论

  5. xgboost 源码学习

    官方代码结构解析,README.MD XGboost 回归时,损失函数式平方误差损失 分类时,是对数自燃损失: Coding Guide ====== This file is intended to ...

  6. 有关Python的import...和from...import...的区别

    1.语法分析:首先from A import a1 是从A模块导入a1工具(可以是某个 函数,全局变量,类),import A是导入整个A模块的全部内容(包括全部的函数,全局变量,类). 2.内存分析 ...

  7. Android:Mstar平台 HDMI OUT 静音流程

    一.framework层 1. APP调用 AudioManager 的 adjustStreamVolume() 接口实现在: frameworks\base\services\core\java\ ...

  8. osg HUD 前景色

    #ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include<iostream> #include <osgV ...

  9. Qt编写输入法V2019终极版

    一.前言 之前写过的V2018版本的输入法,本来已经很完善了,不打算更新升级了,最近有个朋友找我定制一个输入法,需要高仿一个苹果MAC电脑的输入法,MAC操作系统的审美无疑是相当棒的,于是乎直接拿以前 ...

  10. 123457123457#0#-----com.yuming.drawGame01--前拼后广--儿童画画游戏

    com.yuming.drawGame01--前拼后广--儿童画画游戏