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

传送门 \(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=e[i].v;i;i=e[i].nx,v=e[i].v…
题目传送门:https://agc013.contest.atcoder.jp/tasks/agc013_c 题目翻译 给你一个周长为\(L\)的圆,有\(N\)只蚂蚁在圆上爬,速度为一单位距离每秒.有的蚂蚁是逆时针的,有的蚂蚁是顺时针的,蚂蚁互相碰面会转向,问你\(T\)秒后每只蚂蚁分别在什么地方.\(L,T\leqslant 10^9,N\leqslant 10^5\) 题解 碰面转向相当于不转向交换编号,所以我们可以求出最后每只蚂蚁会在哪个地方.然后只需要关注第一只蚂蚁最后的\(pos\)…
A - Biscuits 题目: 给出 \(n\) 个物品,每个物品有一个权值. 问有多少种选取方式使得物品权值之和 \(\bmod\space 2\) 为 \(p\). \(n \leq 50\) 题解: 记录一下 \(n\) 个物品中权值是奇数的数的个数. 分类讨论一下喽... #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long lon…
题目传送门:https://agc013.contest.atcoder.jp/tasks/agc013_e 题目大意: 给定一个长度为\(n\)的木板,木板上有\(m\)个标记点,距离木板左端点的距离分别为\(X_i\),现在你需要在木板上放置一些不相交正方形,正方形需要满足 正方形的边长为整数 正方形底面需要紧贴木板 正方形不能超出木板,正方形要将所有的木板覆盖 标记点的位置不能是两个正方形的交界处 一种合法的正方形放置方案的贡献为所有正方形面积的乘积,也就是为\(\prod\limits_…
那天晚上由于毕业晚会与同学吃饭喝酒没打 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…