AtCoder Grand Contest 055 题解】的更多相关文章

我太菜啦!!!md,第一题就把我卡死了...感觉对构造题不会再爱了... A - ABC Identity 先来看这个题吧,题意就是给定你一个字符串,让你将这个字符串最多分成6个子串,使得每个字符都在某个子串当中,使得每个子串都满足以下条件,每个子串的长度为3的倍数,且前1/3和中间的1/3和最后的1/3内部必须字母一样,且这三部分互不相等.... 构造题我也不是没做过,看到最多6种,我就知道肯定有一种方法是6中且满足所有的情况.可怎么向也想不到....呜呜呜呜.3和6的关系...,最后看看题解…
A 赛时直到最后 10min 才做出这个 A 题,之前猜了一个结论一直没敢写,本来不抱啥希望 AC 的结果比赛结束时交了一发竟然 A 了,由此可见我的水平之菜/dk 考虑每次取出字符串开头字符,不妨设之为 \(c_1\)​​,以及字符串末尾的最靠后的不同于 \(c_1\)​​ 的字符,不妨设之为 \(c_2\)​​,设除了 \(c_1,c_2\)​​ 之外另一个字符为 \(c_3\)​​,我们就维护两个指针 \(l,r\)​,以及一个变量 \(cnt\)​ 表示目前跳了多少步,我们每次贪心地找到…
A - Biscuits 题目: 给出 \(n\) 个物品,每个物品有一个权值. 问有多少种选取方式使得物品权值之和 \(\bmod\space 2\) 为 \(p\). \(n \leq 50\) 题解: 记录一下 \(n\) 个物品中权值是奇数的数的个数. 分类讨论一下喽... #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long lon…
那天晚上由于毕业晚会与同学吃饭喝酒没打 AGC,第二天稍微补了下题,目前补到了 E,显然 AGC 的 F 对于我来说都是不可做题就没补了(bushi A 简单题,不难发现如果我们通过三次及以上的操作将这个串消完,那么我们完全可以把它压缩到两次以内,因此如果两段字符不同答案就是 \(1\),否则我们枚举分割点然后判断分割点两段是否都可以一次消完,如果存在这样的分割点答案就是 \(2\),否则答案为 \(-1\). B 注意到如果我们将原序列分成和相等的两部分并两部分将它们排成一列,那么有且只有一种…
第一次套刷AtCoder 体验良好 传送门 Poisonous Cookies cout<<b+min(c,a+b+); Tree Burning 难度跨度有点大啊 可以证明当第一次转向之后,接下来每次的方向都和前一次相反 因为转向后再往相同方向走一定不如初始就往该方向走然后转两次向 枚举初始往哪个方向走以及走几步,前缀和优化即可 #include<ctime> #include<cmath> #include<cstdio> #include<cst…
题面 传送门 题解 比赛的之后做完\(AB\)就开始发呆了--简直菜的一笔啊-- \(A - Colorful\ Subsequence\) 如果第\(i\)个字母选,那么它前面任意一个别的字母的选择方法为\(cnt_x+1\)种,其中\(cnt_x\)为出现次数,直接乱搞就行了 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define fp(i,a,b) for(R int i=(a)…
传送门 \(A\) 首先只有一串的情况下,遇到相同的肯定是改后面那一个最优,然后两串的话可能要分奇偶讨论一下 //quming #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i) #define go(u) for(int i=head[u],v=…
传送门 \(A\) 直接转移就是了 typedef long long ll; const int N=55; ll f[N][2];int a[N],n,p; int main(){ scanf("%d%d",&n,&p); fp(i,1,n)scanf("%d",&a[i]),a[i]&=1; f[0][0]=1; fp(i,1,n){ f[i][0]=f[i-1][0],f[i][1]=f[i-1][1]; if(a[i]&am…
传送门 \(A\) 找到能达到的最大的和最小的,那么中间任意一个都可以被表示出来 typedef long long ll; int n,a,b;ll res; int main(){ scanf("%d%d%d",&n,&a,&b); if(a>b||n==1&&a!=b)return puts("0"),0; res=(a+b+1ll*(n-2)*b)-(a+b+1ll*(n-2)*a)+1; printf(&quo…
传送门 这场表现的宛如一个\(zz\) \(A\) 先直接把前\(b\)行全写成\(1\),再把前\(a\)列取反就行 const int N=1005; char mp[N][N];int n,m,a,b; int main(){ scanf("%d%d%d%d",&n,&m,&a,&b); fp(i,1,b)fp(j,1,m)mp[i][j]=1; fp(i,1,n)fp(j,1,a)mp[i][j]^=1; fp(i,1,n){ fp(j,1,m)…