12 2021 档案
摘要:分析: 排列为 1 2 3 ... p p+1 p+2 p+3 ... 2p 2p+1 2p+2 ... 3p . . (k-1)p+1 ... kp 发现如果我们选择同一行的p个数 一定是p的倍数 像此类p的倍数或者模数的问题 考虑分类 分为摸p的余数[0,p-1]这么多类 现在考虑kp个数里面选
阅读全文
摘要:https://mp.weixin.qq.com/s?src=11×tamp=1639620052&ver=3499&signature=Z1PQTvhwEnrHBdzSCGJIQNEz-zKRTioorNA4KI7qsS1lvAfH6Z7sKjZCZU8KG9DUVOvDrYhjmSul
阅读全文
摘要:感觉很像小时候玩的一个游戏《一笔成画》 保证图连通,每条边都经过奇数次,等价于每条边只经过一次 对于重边可以不考虑,1->3,3->1,再走回来就行了 发现路径是什么样的不重要,重要的是起点和终点 发现起点和终点的度数一定是奇数 起点最后会引出一条出边 终点最后会收回一条入边 且起点和终点可以互换
阅读全文
摘要:很明显的一个dp dp[i][j]表示打了前i张牌模数为j的方案数 转移方程: dp[i][(j+a[x])%k]=dp[i][(j+a[x])%k]+dp[i-1][j]; 初始状态dp[0][0]=1; #include<bits/stdc++.h> using namespace std; #
阅读全文
摘要:乍一看以为是博弈论,但仔细分析发现就是个简单的图论问题 个人觉得有点像五子棋 分析想要赢,就必须保证有两条以上的路径可供选择,并且这两条路都是必赢的 最简单必赢状态 一个点直接连接两条标记点 复杂点的必赢状态: 我们将最简单的必赢状态的那个点叫准必赢点 如果一个点直接连接了两个或以上的准必赢点,也是
阅读全文
摘要:求逆元有三个办法 这个题数据要求线性递推 #include<cstdio> #define ll long long using namespace std; const int maxn=3e6+5; ll inv[maxn]={0,1}; int main(){ int n,p; scanf("
阅读全文
摘要:数论知识好多都忘记了,今天周末没啥事就复习一下 用扩展欧几里得算法 取地址不是很熟悉就用全局变量吧 #include<bits/stdc++.h> using namespace std; long long x, y; void exgcd(long long a, long long b) {
阅读全文
摘要:分析一下就是一个简单的数论组合数 唯一注意的就是要用逆元,否则要写挂 容斥:ans=总方案数-两个图毫不相干的方案数 总方案数=C((n*(n-1)/2),a)×C((n*(n-1)/2,b); 毫不相干=C((n*(n-1)/2),a)×C((n*(n-1)/2-a,b); #include<bi
阅读全文
摘要:这是一道非常典型的区间dp for(int i=2*n-1;i>=1;i--) for(int j=i+1;j<=2*n;j++) for(int k=i;k<j;k++) f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]); int
阅读全文
摘要:当年我就是死在这个题目上面,错失一等奖 隔着这么久再来做思路还是很清晰的 一个树形动态规划 如果是 ( :dp[u]=dp[fa]; 如果是 ):dp[u]=dp[fa]+x; 其中x是加入)后多出来的字串数,经分析可得x就是连续的括号数 连续的括号可以是( )( (()) )【算2个】 我们就要维
阅读全文
摘要:作为一个退役两年的蒟蒻,来刷刷今年的复赛第一题,把我弄emo了 开始我理解错误了,我每次选择r最小的那个停机坪再更新它,这样能保证空闲时间是最少的,于是我用了线段树保存最小值,只能过25,我怀疑我线段树打错了 就改用树状数组,还是25。至此我还没想到我的方法不对,又改用优先队列,还是25....崩溃
阅读全文
摘要:在此之前先看看一般的约瑟夫问题 发现这个题唯一不一样的就是m,只要在递推的时候不断的更换m数组即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long int n,k;
阅读全文
摘要:乍一看,应该是个背包不错了,一看数据,扯犊子呢,数组开不到那么大 这个题的关键就是 **(1)**物品是连续的,即1,2,3,4,5,,,,n **(2)**每件物品至少有一件 先判断为-1的情况: 所有物品总量和还要小于m,这样再怎么也拼不够 再考虑物品总量>=m 这样总能找到一组,使之和为m!!
阅读全文
摘要:#include <cstdio> #define MAXN 400010 long long num[MAXN]; long long max(long long a, long long b) {return a > b ? a : b;} long long tree[MAXN * 4]; v
阅读全文
摘要:无向图缩点,不知道为啥我写tarjan就是过不了 注意最后一定要把缩点后的大小按照从大到小开始删边 比如说你删4条,在一个环中可以另外得到3个分量,但是如果放在两个环里面分别为删两边,则总和只能得到2个分量 我的代码只能过80的点(我真的尽力了,现在晚上1.55我困得哟死) 2022.3.28更新,
阅读全文
摘要:直接dfs找环即可 两次异或可以抵消,所以直接记录每次异或,最后找到环判断xor[u]^xor[v]^dis<u,v>是否为零即可 #include<cstdio> #include<map> using namespace std; const int N = 100000 + 10 , M =
阅读全文
摘要:这个题关键在于每个ai只是1或-1,也就是总和最大2e6。 有什么用?可以开到数组 再发现这个x一定是存在的,因为1和-1均为连续变化的,所以整个数列是连续的 综上可以用STL里面的vector #include<bits/stdc++.h> using namespace std; const i
阅读全文