
2020杭电多校
AKone123456
这个作者很懒,什么都没留下…
展开
-
Equal Sentences--------------------思维(dp)
解析:设f[i]:表示前i个字符组成相似字符串的个数当a[i]==a[i-1] f[i]=f[i-1] 因为a[i]和a[i-1]无法交换当a[i]!=a[i-1] f[i]=f[i-1]+f[i-2] 分别表示可以交换和不交换不交换f[i-1],可以交换f[i-2]#include <bits/stdc++.h>using namespace std;const int MOD=1e9+7;typedef long long ll;int t,n;ll f[2...原创 2020-08-06 11:38:41 · 154 阅读 · 0 评论 -
Deliver the Cake---------------------思维(拆点+最短路)
题意:张三拿着蛋糕要从起点s走到终点t的最少代价?给定n个村庄,m条边.每条边都有一个边权。每个村庄都有三个属性一个是蛋糕在左手L,一个是蛋糕在右手是R ,一个是蛋糕在中间M(不受限制)如果x->y 需要换手的,那么就要付出代价x解析:拆点对蛋糕在中间M拆成两个点,一个是L(点i),一个是R(点i+n)然后讨论u->v 建边如果s[u] == ‘L’&&s[v] == ‘R’ 或者相反(需要换手)add(u,v,c+x);add(v,u,c+x);...原创 2020-08-05 21:43:58 · 270 阅读 · 0 评论 -
Tokitsukaze and Rescue----------------------思维(spfa+dfs)
题意:给定n个点的完全图,你可以删除k条边,使得最短路最长解析:由于k最大为5,所以我们可以采用dfs。我们只要删除最短路径中的任意一条路经即可(dfs枚举删除路经即可) 然后就递归到下一层删除(k-1)条边的子问题。用一个path数组记录最短路径#include <bits/stdc++.h>using namespace std;const int N=1e5+1000;int t,n,k,u,v,c;int path[N],g[100][100];int d...原创 2020-07-29 16:33:52 · 245 阅读 · 0 评论 -
Little W and Contest--------------------------------思维(组合数学+并查集+逆向思维)
题意:有一个ACM社团,有n个成员,每个成员的战斗力1或2.现在这n个人都不认识,然后每一天都会有两个人相识(如果A和B相识,B和C相识 那么自然A和C相识).现在每一天都要让你选出3个人,这三个人的战斗力必须>=5,而且这三个人必须都不认识。问你每一天有多少种方案可以组合起来。解析:根据样例相识的关系越来越多,最后的方案肯定为0,所以我们算出的总的方案减去每一天相识的人组队的方案即可首先我们统计出战斗力为1的人数cnt1,战斗力为2的人数cnt2那么总的方案sum=C(2cnt...原创 2020-07-29 15:22:02 · 222 阅读 · 0 评论 -
Tokitsukaze and Multiple-------------------------------思维(前缀和/dp)
题意:给定长度为n的序列,让你把序列切成若干段,问最多有多少段之和是p的倍数解析:根据前缀和 (s[r]-s[l-1])%p==0 s[r]%p == s[l-1]%p所以我们先把前缀和处理出来。遇到相同的前缀和就意味着这段区间一定是p的倍数又因为我们分成若干段。当前面某一段是p的倍数时,前缀和就要恢复成0,等待下一段是p的倍数#include <bits/stdc++.h>typedef long long ll;const int N=1e5+1000;...原创 2020-07-28 23:38:36 · 177 阅读 · 0 评论 -
Lead of Wisdom---------------------------------------思维(dfs)
解析:把不同的类型分到一个组里面,然后直接爆搜每一种状态记录最大值即可#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=100;inline int read(){ int sgn = 1; int cnt = 0; char ch = getchar(); while (ch < '0' || ch > '9') { ...原创 2020-07-24 20:12:18 · 183 阅读 · 0 评论 -
The Oculus------------------------------思维
题意:给定A,B,C三个数组bi值C是由AB得到,现在问你改变C中哪一位bi 使得AB=C解析:因为没有模,所以我们用unsigned long long 来表示,溢出就会自动模掉后面直接把A,B,C三个值算出来然后枚举C的每一位即可#include<bits/stdc++.h>using namespace std;const int N=2e6+10;typedef unsigned long long ull;ull f[N];void init(){ ...原创 2020-07-24 17:41:34 · 166 阅读 · 0 评论 -
Total Eclipse--------------------------思维(并查集+思维+贪心)
题意:给定n个点,m条边的无向图,每个点有一个权值vi ,你每次选择一个连通块使得连通块里面的点权值vi-1问最少操作多少次使得n个点的权值都为0解析:贪心,我们按照权值从大到小排序,我们需要把权值大的减成和权值小的一样,同时还有维护连通块的数量。举个例子节点编号为:1,2,3节点权值为:4,3,2现在将1号节点加入到图中 连通块只有cnt=1个将2号节点加入到图中,我们计算对答案的贡献就是1号节点和2号节点的差值:(4-3)*cnt,那么1号节点的权值就为3假设(1,2)不连通的...原创 2020-07-24 16:42:58 · 204 阅读 · 0 评论 -
.Distinct Sub-palindromes--------------------------思维(结论)
1.Distinct Sub-palindromes题意:长度为n,本质不同的回文子串个数最少的由小写字母‘a’~'z’组成的数量解析:n==1 设字符为x.那么本质不同的回文子串个数就是: 'a'~'z' 共26个n==2 设字符为x,y 那么长度为2的类型为 xx,xy 对于xx字符串的回文子串有 x,xx对于xy字符串的回文子串有x,y 所以本质不同的回文子串个数为2 那么方案数为26*26n==3 设字符为x,y,z 那么长度为3的类型xxx,xxy,xyx,yxx,x原创 2020-07-23 16:13:36 · 271 阅读 · 0 评论