Atcoder题解
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
AtCoder Beginner Contest 074(CD)
AtCoder Beginner Contest 074(CD)C - Sugar Water思路:暴力。D - Restoring Road Network思路:类似floyd,floyd,floyd,考虑对任意两个点u,vu,vu,v是否存在d[u][v]=d[u][w]+d[w][v]d[u][v]=d[u][w]+d[w][v]d[u][v]=d[u][w]+d[w][v]若存在说明d[u][v]d[u][v]d[u][v]这条边可以不需要。若d[u][v]>d[u][w]+d[原创 2020-09-13 11:11:55 · 348 阅读 · 0 评论 -
AtCoder Beginner Contest 073 (D)
AtCoder Beginner Contest 073 (D)D - joisino’s travel思路:最短路+++暴力全排列即可。值得注意的是:next_permutationnext\_permutationnext_permutation要将排列先置为递增序,才能实现全排列情况。 for(int i=1;i<=R;i++) spfa(r[i]); ll ans=1e15; sort(r+1,r+R+1); do{ ll tmp=0; for(int i=2;i<原创 2020-09-11 09:33:09 · 309 阅读 · 0 评论 -
AtCoder Beginner Contest 072 (CD)
AtCoder Beginner Contest 072 (CD)C - Together思路:用桶暴力枚举答案即可。D - Derangement思路:考虑相邻两个元素的所有情况。1.pi≠i,pi+1≠i+1p_i\neq i,p_{i+1}\neq i+1pi=i,pi+1=i+1。显然没有贡献。2.pi=i,pi+1=i+1p_i=i,p_{i+1}=i+1pi=i,pi+1=i+1显然它们交换一次即可,贡献+1+1+1。3.pi=i,pi+1≠i+1p_i=i,p原创 2020-09-10 09:26:31 · 472 阅读 · 0 评论 -
AtCoder Beginner Contest 071 (CD)
AtCoder Beginner Contest 071 (CD)C - Make a Rectangle思路:排序后mapmapmap统计即可。D - Coloring Dominoes思路:考虑只有两种排列方式。从左到右进行乘法原理计算。先考虑最左边,若为方式1,则有333种,否则有666种。接下来有4种情况:1. 1→21.\ 1\rightarrow21. 1→2情况1贡献为222。2. 1→12.\ 1\rightarrow 12. 1→原创 2020-09-09 09:31:23 · 318 阅读 · 0 评论 -
AtCoder Beginner Contest 070 (CD)
AtCoder Beginner Contest 070 (CD)前言:上学可能要断更了。。。。。。尽量不鸽。C - Multiple Clocks思路:求最小公倍数即可。D - Transit Tree Path思路:跑kkk为根的dfsdfsdfs求距离,答案即为:d[x]+d[y]d[x]+d[y]d[x]+d[y]void dfs(int u,int fa){ for(int i=h[u];i;i=e[i].nt){ if(e[i].to==fa) continue; int原创 2020-09-08 09:21:54 · 297 阅读 · 0 评论 -
AtCoder Beginner Contest 069 (CD)
AtCoder Beginner Contest 069 (CD)C - 4-adjacent思路:只需特判2的因子的个数是0,1,至少为20,1,至少为20,1,至少为2的数分别有多少个。只要s2>=s0s_2>=s_0s2>=s0 或者s2≥n2s_2\ge \dfrac{n}{2}s2≥2n即可D - Grid Coloring思路:从上往下来回扫即可。int id=1,s=0,x=1,y=1,d=1; while(s<a[id]&&id&原创 2020-09-07 09:54:55 · 345 阅读 · 0 评论 -
AtCoder Beginner Contest 068(CD)
AtCoder Beginner Contest 068(CD)C - Cat Snuke and a Voyage思路:mapmapmap暴力统计。D - Decrease (Contestant ver.)思路:逆向考虑构造最终序列:[0,1,3,…,49][0,1,3,\dots,49][0,1,3,…,49]满足情况。然后从左往右开始操作即可。每进行505050次操作,相当于所有数加111。ep:ep:ep:第一次进行505050次操作:[0,49]→[1,50][0,49]\righ原创 2020-09-06 13:27:30 · 330 阅读 · 0 评论 -
超码在线编程大赛初赛 第3场
超码在线编程大赛初赛 第3场赛后做的,第二题不会dpdpdp,太菜了。。1.最大公倍数思路:枚举最后四个数的所有情况,若只有三个数,则这三个数lcmlcmlcm就是答案。2.房屋染色思路:dpdpdp令:dp[i][j][0]dp[i][j][0]dp[i][j][0] 为前iii个房屋中第iii个房屋颜色为jjj没有步行街的最小花费。dp[i][j][1]dp[i][j][1]dp[i][j][1]为第iii个房屋是步行街的最小花费。然后进行dpdpdp转移即可。可以先做下这题,是题2的原创 2020-09-05 18:35:24 · 388 阅读 · 0 评论 -
AtCoder Beginner Contest 067(CD)
AtCoder Beginner Contest 067(CD)C - Splitting Pile思路:预处理前后缀,暴力即可。D - Fennec VS. Snuke思路:考虑所有点到1,n1,n1,n的距离,谁的距离较小这个点就属于谁。距离相同属于先手,因为先手可以先走一步。所以最后统计属于1的点数sss,和属于nnn的点数n−sn-sn−s.若s>n−ss>n-ss>n−s则先手赢,反之后手胜。如果s=n−ss=n-ss=n−s是后手胜,因为先手不能再走了。voi原创 2020-09-05 10:13:35 · 327 阅读 · 0 评论 -
AtCoder Beginner Contest 066(CD)
AtCoder Beginner Contest 066 (CD)C - pushpush思路:双端队列+指针指向即可。D - 11思路:组合数学。考虑对于kkk用所有方案数−-−重复的方案数。总方案数为:C(n+1,k)C(n+1,k)C(n+1,k)假设重复的那个数为xxx,两个数的位置分别为:p1<p2p_1<p_2p1<p2当且仅当所选择的kkk个数只包含一个xxx,且不含(p1,p2)(p_1,p_2)(p1,p2)之间的数则方案会重复。所以重复的方案数原创 2020-09-04 10:19:30 · 396 阅读 · 1 评论 -
AtCoder Beginner Contest 065(CD)
AtCoder Beginner Contest 065(CD)C - Reconciled?思路:n,mn,mn,m等价,可假设n≤mn\le mn≤m分情况讨论:1.n==m1.n==m1.n==mans=2(Ann)2ans=2(A_n^n)^2ans=2(Ann)22.n=m−1n=m-1n=m−1ans=Ann×Ammans=A_{n}^{n}\times A_{m}^mans=Ann×Amm3.n<mn<mn<mans=0ans=0ans=0D - B原创 2020-09-03 10:42:00 · 481 阅读 · 0 评论 -
AtCoder Beginner Contest 064(CD)
C - Colorful Leaderboard思路:暴力特判。D - Insertion思路:贪心。令(((表示+1+1+1,)))表示−1-1−1,pre[i]pre[i]pre[i]表示前缀和。则题目可转换为pre[i]≥0,i∈[1,n],pre[n]=0pre[i]\geq0,i\in[1,n],pre[n]=0pre[i]≥0,i∈[1,n],pre[n]=0(下标从1开始)在位置iii后插入一个(((则等价于pre[j]++,j∈[i+1,n]pre[j]++,j\in[i+1,原创 2020-09-02 16:54:44 · 363 阅读 · 0 评论 -
AtCoder Beginner Contest 063(CD)
AtCoder Beginner Contest 063(CD)C - Bugged思路:特判总和是否满足,若不满足再遍历去掉一个数是否满足,否则输出0.D - Widespread思路:二分。考虑操作转换为:所有数减BBB,再选择一个数减A−BA-BA−B。然后二分操作判断即可。bool check(ll x){ ll s=0; for(int i=1;i<=n;i++){ if(a[i]-B*x<=0) continue; s+=(a[i]-B*x+A-B-1)/(原创 2020-08-28 09:39:47 · 343 阅读 · 0 评论 -
AtCoder Beginner Contest 062(CD)
AtCoder Beginner Contest 062(CD)C - Chocolate Bar思路:暴力。因为只能切222刀,所以最多只有444种情况,然后暴力枚举第一刀横着切或者竖着切的长度即可。ll fun(ll s,ll x,ll y){ ll a=x>>1,b=y>>1; ll t1[3],t2[3]; t1[0]=abs(a*y-s),t1[1]=abs((x-a)*y-s),t1[2]=abs(a*y-(x-a)*y); sort(t1,t1+3);原创 2020-08-27 10:03:03 · 356 阅读 · 0 评论 -
AtCoder Beginner Contest 061(CD)
AtCoder Beginner Contest 061(CD)C - Big Array思路:mapmapmap排序记数,注意开LLLLLLD - Score Attack此题题意严重不清晰,题目只要求d[n]d[n]d[n]是否可以无限增加,但是正解是点nnn必须在正环中才行。因为考虑spfaspfaspfa判正环,或者暴力bellman−fordbellman-fordbellman−ford特判第nnn次和第2n2n2n次的d[n]d[n]d[n]是否相同来判正环。spfaspfaspf原创 2020-08-26 10:18:30 · 373 阅读 · 0 评论 -
AtCoder Beginner Contest 060(CD)
AtCoder Beginner Contest 060(CD)C - Sentou思路:取nnn个区间的并集就好。D - Simple Knapsack思路:背包问题的变式,容量非常大。1.暴力枚举,因为最多4种物品,枚举每种物品个数。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;#defin原创 2020-08-25 10:08:10 · 375 阅读 · 0 评论 -
AtCoder Beginner Contest 059(CD)
AtCoder Beginner Contest 059(CD)以后只写C,DC,DC,D的题解。C - Sequence思路:贪心暴力,显然只有两种情况,正负正负或者负正负正,然后贪心即可。D - Alice&Brown思路:博弈找规律。显然有边界情况:我们假设x≤yx\leq yx≤y(因为两堆石子等价)(0,0),(0,1),(1,1)(0,0),(0,1),(1,1)(0,0),(0,1),(1,1)是必败的情况。这是abs(x−y)≤1abs(x-y)\le1abs(x−y原创 2020-08-24 09:43:08 · 387 阅读 · 0 评论 -
AtCoder Beginner Contest 058(ABCD)
AtCoder Beginner Contest 058(ABCD)A - ι⊥l思路:特判B - ∵∴∵思路:模拟C - Dubious Document思路:暴力统计下每个字母出现的最小次数,然后排序。D -求和优化。我的公式:考虑包含某个yiy_iyi 出现的所有对的贡献分类求和。sy=∑i=2m−(m−i+1)×yi−1s_y=\sum_{i=2}^m-(m-i+1)\times y_{i-1}sy=∑i=2m−(m−i+1)×yi−1sxs_xsx同理。最后答案即原创 2020-08-23 07:43:58 · 440 阅读 · 0 评论 -
AtCoder Beginner Contest 057(ABCD)
AtCoder Beginner Contest 057(ABCD)A - Remaining Time直接模拟取模。B - Checkpoints暴力枚举。C - Digits in Multiplication一开始想复杂以为是质因数分解,因为只要求找出所有的pair(A,B),AB=Npair(A,B),AB=Npair(A,B),AB=N显然可以暴力枚举AAA。D - Maximum Average Sets贪心,显然取aaa个最大的是最优的,因为越取多,数可能会变小,平均值也可能原创 2020-08-22 10:32:21 · 423 阅读 · 0 评论 -
AtCoder Beginner Contest 056(ABCD)
AtCoder Beginner Contest 056(ABCD)A - HonestOrDishonest思路:特判B - NarrowRectanglesEasy思路:讨论特判。C - Go Home思路:贪心,求和第一个大于等于xxx的iii即为答案。D - No Need思路:考虑答案是排序后的某个前缀。因为当a[i]a[i]a[i]是necessarynecessarynecessary时,x≥a[i]x\ge a[i]x≥a[i]都是necessarynecessarynec原创 2020-08-21 10:22:00 · 490 阅读 · 0 评论 -
AtCoder Beginner Contest 055(ABCD)
AtCoder Beginner Contest 055(ABCD)A - Restaurant思路:直接模拟。B - Training Camp思路:暴力求阶乘即可。C - Scc Puzzle思路:简单讨论特判。D - Menagerie思路:考虑前两个的情况,然后暴力递推特判即可。...原创 2020-08-20 09:03:45 · 386 阅读 · 0 评论 -
AtCoder Beginner Contest 054(ABCD)
AtCoder Beginner Contest 054(ABCD)A - One Card Poker思路:特判即可。B - Template Matching思路:模拟注意下细节即可。C - One-stroke Path我的思路:暴力位运算枚举然后特判下。更简单的思路:dfsdfsdfs爆搜。void dfs(int u,int s){ if(s==n){ ans++;return; } vis[u]=1; for(int v:e[u]){ if(!vis[v]) d原创 2020-08-19 12:45:36 · 458 阅读 · 0 评论 -
AtCoder Beginner Contest 053(ABCD)
AtCoder Beginner Contest 053(ABCD)A - ABC/ARC思路:特判。B - A to Z String思路:AAA取第一次,ZZZ取最后一次.C - X: Yet Another Die Game思路:显然用6,56,56,5来回是最优的,然后特判一下即可。D - Card Eater思路:观察一下可发现次数%2==1\%2==1%2==1贡献为111,然后对%2==0\%2==0%2==0的所有数进行计算,令%2==0\%2==0%2==0的数个数为cnt原创 2020-08-18 10:05:08 · 342 阅读 · 0 评论 -
AtCoder Beginner Contest 052(ABCD)
AtCoder Beginner Contest 052(ABCD)A - Two Rectangles思路:特判即可。B - Increment Decrement思路:按题意模拟。C - Factors of Factorial思路:质因数分解,然后乘法原理,每个质因数贡献为:cntpi+1cnt_{p_i}+1cntpi+1,注意最后不用减1,因为那个是因数111。D - Walk and Teleport思路:贪心肯定一直向右是最优,然后特判两两之间的距离选较小花费即可。.原创 2020-08-17 08:48:38 · 365 阅读 · 0 评论 -
AtCoder Beginner Contest 051(ABCD)
AtCoder Beginner Contest 051(ABCD)A - Haiku思路:直接模拟。B - Sum of Three Integers思路:暴力枚举。C - Back and Forth思路:按矩阵走一个来回后再围一层矩阵走即可。D - Candidates of No Shortest Paths思路:多源最短路判断路径,用spfaspfaspfa记录存在的路径然后用mmm减即可,标答的floydfloydfloyd对条边进行匹配也可。#include<bits/原创 2020-08-15 10:23:57 · 482 阅读 · 0 评论 -
AtCoder Beginner Contest 050(ABCD)
A - Addition and Subtraction Easy思路:依题意即可。B - Contest with Drinks Easy思路:简单模拟。C - Lining Up思路:乘法原理,用数组维护下每个数出现次数,注意特判下nnn为奇数,000只有一种,其他是两种.int n;cin>>n; int f=1,jg=n&1; ll ans=1; int cnt=0; for(int i=1;i<=n;i++){ int x; cin>&g原创 2020-08-14 09:26:11 · 419 阅读 · 0 评论 -
AtCoder Beginner Contest 049(ABCD)
AtCoder Beginner Contest 049(ABCD)A - UOIAUAI思路:特判即可。B - Thin思路:按题意模拟。C - Daydream思路:从后往前特判。D - Connectivity思路:求两个并查集的交集大小即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1原创 2020-08-13 09:38:31 · 460 阅读 · 0 评论 -
AtCoder Beginner Contest 048(ABCD)
AtCoder Beginner Contest 048(ABCD)A - AtCoder *** Contest取三个字符串首位即可。B - Between a and b …前缀和相减即可,注意特判a=0a=0a=0.C - Boxes and Candies从前往后遍历贪心对每对靠后的位置取,如果不够再取靠前的一个位置。D - An Ordinary Game奇偶性博弈,1.如果首位字母不同,最后肯定剩下偶数个,所以如果nnn为奇,肯定操作偶数个后手胜,反之先手胜。2.首位字母原创 2020-08-12 10:09:22 · 381 阅读 · 0 评论 -
AtCoder Beginner Contest 047(ABCD)题解
AtCoder Beginner Contest 047(ABCD)题解A - Fighting over Candies排序特判水题。B - Snuke’s Coloring 2 (ABC Edit)取矩形交集即可。C - 1D Reversi将连续相同的看成一次操作,答案就是cnt−1cnt-1cnt−1.D - An Invisible Hand维护一个前缀maxmaxmax即可。...原创 2020-08-11 10:36:09 · 470 阅读 · 0 评论 -
AtCoder Beginner Contest 046(ABCD)题解
AtCoder Beginner Contest 046(ABCD)题解传送门A - AtCoDeer and Paint Cans思路:用一个setsetset维护一下不同的数输出集合大小即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memset(a,0,siz原创 2020-07-10 09:13:52 · 556 阅读 · 0 评论 -
AtCoder Beginner Contest 045(ABCD)题解
AtCoder Beginner Contest 045(ABCD)题解A - Trapezoids思路:求梯形面积,显然s=(a+b)h2s=\dfrac{(a+b)h}{2}s=2(a+b)h#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memset(a,0,siz原创 2020-07-09 10:02:43 · 477 阅读 · 0 评论 -
AtCoder Beginner Contest 044(ABCD)题解
AtCoder Beginner Contest 044(ABCD)题解传送门A - Tak and Hotels (ABC Edit)思路:显然讨论一下kkk的范围即可。时间复杂度:O(1)O(1)O(1)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memset(原创 2020-07-08 10:30:43 · 659 阅读 · 0 评论 -
AtCoder Beginner Contest 043题解(ABCD)
AtCoder Beginner Contest 043题解(ABCD)传送门A - Children and Candies (ABC Edit)题意:求∑i=1ni\sum\limits_{i=1}^n ii=1∑ni思路:签到题,直接按照公式输出n(n+1)2\dfrac{n(n+1)}{2}2n(n+1)。时间复杂度:O(1)O(1)O(1)#include<bits/stdc++.h>using namespace std;typedef long long ll;原创 2020-07-07 09:48:12 · 453 阅读 · 0 评论 -
ABC.173.F - Intervals on Tree
ABC.173.F - Intervals on Tree传送门题意:给定nnn个结点n−1n-1n−1条边的树,求结点的所有子集(区间[l,r])(区间[l,r])(区间[l,r])的连通块的和。思路:考虑最开始为nnn个孤立点的所有子集的连通块的和,再减去每条边对于连通块的贡献。显然每个点就是一个连通块。考虑包含111的子集(区间): l≤1,r≥1l\leq1,r\geq1l≤1,r≥1,lll有1种选择,rrr有n−1+1n-1+1n−1+1种选择。即1×(n−1+1)=n1\time原创 2020-07-06 11:19:07 · 701 阅读 · 4 评论 -
ABC.173.E - Multiplication 4
ABC.173.E - Multiplication 4传送门题意:求最大子序列乘积。思路:贪心,先对数组排序,讨论kkk的奇偶性,再两个两个地取。因为两个负数和两个正数的乘积都是正数。1.k1.k1.k是奇数,我们先去最大的数作为初始答案,然后特判一下最大数是否为负数,如果最大的数都为负数,且kkk是奇数,显然答案只能为负,这时我们取较小的正数是最优的,若初始答案为正数,我们就贪心取分别设置两个指针,从左边和右边,贪心地取,谁大取谁即可。2.kkk是偶数同理,直接开始从左边和右边贪心地取,这样原创 2020-07-06 11:04:32 · 836 阅读 · 0 评论 -
AtCoder Beginner Contest 042题解(ABCD)
AtCoder Beginner Contest 042题解(ABCD)传送门A - Iroha and Haiku (ABC Edition)签到题,直接判断是否是两个555,一个777。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memset(a,0,sizeof原创 2020-07-06 10:51:38 · 803 阅读 · 0 评论