点此进入比赛

\(A\):><(点此看题面

大致题意: 给你一个长度为\(n-1\)、由\(<\)和\(>\)组成的的字符串,第\(i\)位的字符表示第\(i\)个数和第\(i+1\)个数的大小关系,求这个由非负整数组成的数组中元素和的最小值。

送分题都想了几分钟才做出来,真是退役预警......

显然,对于所有小于两旁的数,我们给它赋值为\(0\),然后再从它们向两边扩展即可。

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 500000
#define Gmax(x,y) (x<(y)&&(x=(y)))
using namespace std;
int n,H=1,T=0,a[N+5],q[N+5],vis[N+5];string s;
int main()
{
RI i,k;cin>>s,n=s.length()+1,s="%"+s+"%",s[1]=='<'&&(q[++T]=1),s[n-1]=='>'&&(q[++T]=n);
for(i=2;i^n;++i) s[i-1]=='>'&&s[i]=='<'&&(q[++T]=i);W(H<=T) k=q[H++],
s[k-1]=='>'&&(Gmax(a[k-1],a[k]+1),!vis[k-1]&&(vis[q[++T]=k-1]=1)),//向左扩展
s[k]=='<'&&(Gmax(a[k+1],a[k]+1),!vis[k+1]&&(vis[q[++T]=k+1]=1));//向右扩展
long long ans=0;for(i=1;i<=n;++i) ans+=a[i];return printf("%lld",ans),0;//统计答案
}

\(B\):Two Contests(点此看题面

大致题意: 有\(n\)个区间,让你把它划分成非空的两部分,使得两部分区间交集大小之和最大。

首先,我们要知道,对于一些区间\([l_i,r_i]\),它们的交集大小是\(max(min\{r_i\}-max\{l_i\}+1,0)\)。

因此,可以先将区间按左端点排序,然后枚举其中一个区间左端点最大值为\(l_i\),则另一个区间左端点最大值为\(l_n\)。

而对于右端点,有两种可能性。

设第\(1\sim i\)条线段中最小的\(r\)为\(r_{min}\),最大的为\(r_{max}\),第\(i+1\sim n\)中最小的\(r\)为\(Mn\)。

那么最优情况下,两个集合的\(min\{r_i\}\)要么分别是\(r_{min},Mn\),要么分别是\(r_{max},min(r_{min},Mn)\)。

确定了左端点和右端点,我们就可以因此而更新答案了。

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 100000
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define Gmax(x,y) (x<(y)&&(x=(y)))
using namespace std;
int n;set<int> p,q;
struct Il {int x,y;I bool operator < (Con Il& o) Con {return x<o.x;}}s[N+5];
class FastIO
{
private:
#define FS 100000
#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
#define tn (x<<3)+(x<<1)
#define D isdigit(c=tc())
char c,*A,*B,FI[FS];
public:
I FastIO() {A=B=FI;}
Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
}F;
int main()
{
RI i,j,t,ans=0;for(F.read(n),i=1;i<=n;++i) F.read(s[i].x),F.read(s[i].y);
for(sort(s+1,s+n+1),i=1;i<=n;++i) q.insert(s[i].y);//排序,一开始默认所有线段在第二个集合
for(i=1;i<=n;++i) q.erase(s[i].y),p.insert(s[i].y),t=0,//枚举一个区间的左端点最大值,把对应右端点移入第一个集合中
Gmax(t,max(*--p.end()-s[i].x+1,0)+max(min(*p.begin(),*q.begin())-s[n].x+1,0)),//第一种情况
Gmax(t,max(*p.begin()-s[i].x+1,0)+max(*q.begin()-s[n].x+1,0)),Gmax(ans,t);//第二种情况,更新ans
return printf("%d",ans),0;
}

\(C\):Neither AB nor BA(点此看题面

大致题意: 对于一个由\(A,B,C\)三种字符组成的字符串,每次可以删除连续两个不为ABBA的字符,求有多少个长度为\(n\)的字符串可以删空。

首先,我们考虑不存在\(C\)的情况。

此时,若我们把奇数位上的\(A\)变成\(B\)、\(B\)成\(A\),就可以发现,当且仅当\(A\)和\(B\)的个数相同时,这个字符串可以删空。

同时由于改变后的字符串与原字符串一一对应,所以只要求出改变后的字符串的个数,就可以求出答案。

再考虑存在\(C\),由于\(C\)可以视为\(A\)或\(B\)中的任意一种,因此只要满足\(A\)和\(B\)的个数之差个数小于等于\(C\)的个数,就可以删空。

考虑这个答案可以容斥,即求出\(A\)和\(B\)的个数之差大于\(C\)的个数的方案数,然后用总方案数将其减去。

则此时必然存在\(A\)或\(B\)中的某一种有\(i\)个(\(i>\frac n2\)),而剩余\(n-i\)个位置可以任意填另一种字母和\(C\)。

即此时的方案数为:

\[C_n^i\times 2^{n-i}
\]

因此预处理阶乘及阶乘逆元,\(O(n)\)枚举\(i\),统计答案即可。

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 10000000
#define X 998244353
#define C(x,y) (1LL*Fac[x]*IFac[y]%X*IFac[(x)-(y)]%X)
using namespace std;
int n,Fac[N+5],IFac[N+5];
I int Qpow(RI x,RI y) {RI t=1;W(y) y&1&&(t=1LL*t*x%X),x=1LL*x*x%X,y>>=1;return t;}//快速幂
int main()
{
RI i,t=0;for(scanf("%d",&n),Fac[0]=i=1;i<=n;++i) Fac[i]=1LL*Fac[i-1]*i%X;//预处理阶乘
for(IFac[n]=Qpow(Fac[n],X-2),i=n-1;~i;--i) IFac[i]=1LL*IFac[i+1]*(i+1)%X;//预处理阶乘逆元
for(i=n/2+1;i<=n;++i) t=(1LL*C(n,i)*Qpow(2,n-i)+t)%X;//计算答案
return printf("%d",(Qpow(3,n)-2*t%X+X)%X),0;//容斥,注意乘2
}

\(D\):Balance Beam(占坑待填)

\(E\):Prefix Suffix Addition(占坑待填)

\(F\):Two Pieces(占坑待填)

【AtCoder】AtCoder Grand Contest 040 解题报告的更多相关文章

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

    点此进入比赛 \(A\):XOR Circle(点此看题面) 大致题意: 给你\(n\)个数,问是否能将它们摆成一个环,使得环上每个位置都是其相邻两个位置上值的异或值. 先不考虑\(0\),我们假设环 ...

  2. 【AtCoder】AtCoder Grand Contest 039 解题报告

    点此进入比赛 \(A\):Connection and Disconnection(点此看题面) 大致题意: 给你一个字符串,将它重复\(k\)次.进行尽量少的操作,每次修改一个位置上的字符,使得不存 ...

  3. AtCoder Beginner Contest 122 解题报告

    手速选手成功混进rated only里面的前30名,但是总排名就到110+了... A - Double Helix #include <bits/stdc++.h> #define ll ...

  4. AtCoder Beginner Contest 146解题报告

    题目地址 https://atcoder.jp/contests/abc146/tasks 感觉没有什么有意思的题... 题解 A #include <bits/stdc++.h> usi ...

  5. Atcoder Beginner Contest 124 解题报告

    心态爆炸.本来能全做出来的.但是由于双开了Comet oj一个比赛,写了ABC就去搞那个的B题 还被搞死了. 回来写了一会D就过了.可惜比赛已经结束了.真的是作死. A - Buttons #incl ...

  6. AtCoder Beginner Contest 118 解题报告

    A - B +/- A #include <bits/stdc++.h> int main() { int a, b; std::cin >> a >> b; b ...

  7. AtCoder Beginner Contest 120 解题报告

    为啥最近都没有arc啊... A - Favorite Sound #include <algorithm> #include <iostream> #include < ...

  8. AtCoder Beginner Contest 117 解题报告

    果然abc都是手速场. 倒序开的qwq. D题因为忘记1e12二进制几位上界爆了一发. A - Entrance Examination 就是除一下就行了... 看样例猜题意系列. #include& ...

  9. AtCoder Grand Contest 040

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

随机推荐

  1. 系统架构师考试知识点mp3资料免费下载

    场景 系统架构设计师考试,属于全国计算机技术与软件专业技术资格考试(简称计算机软件资格考试)中的一个高级考试. 系统架构设计师考试,考试不设学历与资历条件,不论年龄和专业,考生可根据自己的技术水平,选 ...

  2. C#NULL条件运算符

    C#6.0新增的特性 NULL条件运算符 ?. 之前我们在需要判断某个对象是否为空的是这样的 Person per = null; if (per != null) { Console.Write(& ...

  3. LRC歌词原理和实现高仿Android网易云音乐

    大家好,我们是爱学啊,今天给大家带来一篇关于LRC歌词原理和在Android上如何实现歌词逐行滚动的效果,本文来自[Android开发项目实战我的云音乐]课程:逐字滚动下一篇文章讲解. 效果图 相信大 ...

  4. Spring Boot Mybatis 最基本使用mysql存储过程

    首先声明:只是用最简单的方法大致了解如何用存储过程开发,如果需要查看存储过程创建语法的自行百度搜索 一.首先创建最基本的数据库 CREATE TABLE `t_user` ( `id` varchar ...

  5. 团队项目之测试与发布(Alpha版本)

    小组:BLACK PANDA 时间:2019.12.05 测试报告 1.测试找出的BUG 图片上传,文件过大会出错 用户可访问不具权限的URL 空字段导致异常 serializable反序列化时版本不 ...

  6. Zabbix-3.4简介及安装配置

    一.概述 1.为什么选择Zabbix? Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件.Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警.这样可以快速反馈 ...

  7. python 中model.py详解

    model详解 Django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 创建表 基本结构 from django.db import models # Creat ...

  8. 原生js放大镜效果

    效果: 1.  鼠标放上去会有半透明遮罩.右边会有大图片局部图 2.  鼠标移动时右边的大图片也会局部移动 放大镜的关键原理: 鼠标在小图片上移动时,通过捕捉鼠标在小图片上的位置,定位大图片的相应位置 ...

  9. 【西北师大-2108Java】第十次作业成绩汇总

    [西北师大-2108Java]第十次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第12周学习指导及要求 实验目的与要求 (1)掌握Vetor.Stack.Hashtable三个类的用途及常用 ...

  10. angularjs中directive指令与component组件有什么区别?

     壹 ❀ 引 我在前面花了两篇博客分别系统化介绍了angularjs中的directive指令与component组件,当然directive也能实现组件这点毋庸置疑.在了解完两者后,即便我们知道co ...