摘要:
这题是欧拉反演的应用,之前没学过欧拉函数和欧拉反演,傻傻对着 \(gcd(i,j)\) 不知道怎么化简。 首先对原来的矩阵进行转化,拆成 \(n\) 个小矩阵 因为\(gcd(i,j)= \sum_{x|i,x|j} \phi(x)\) 这是因为对于任意的正整数 \(n\) 都有 \(n=\sum_ 阅读全文
摘要:
1007 简单博弈,队友做的 #include<bits/stdc++.h> using namespace std; const int N=2e5; int n,a[N+5],b[N+5],A,B; bool vis[N+5]; inline int read() { int x=0;bool 阅读全文
摘要:
1004 如果r2>2r1且树的直径>2r1,则逃跑方总能逃跑 否则攻击方肯定能一步步把其逼到叶子节点 #include<bits/stdc++.h> using namespace std; const int N=1e5; int n,s,r1,r2; vector<int> ver[N+5]; 阅读全文
摘要:
K 贪心地先凑出前后端后,中间的部分是本质不同的子序列个数 然后枚举可以重叠的部分,如果可以重叠肯定是回文后缀 有不少细节,比如空串,重叠部分要求后面的能取到 #include<cstdio> #include<iostream> #define int long long #define ULL 阅读全文
摘要:
E 观察到s(m)<=108,所以r是可以枚举的 但是枚举完后再开根号,时间复杂度为O(T*r*sqrt(n))≈O(100*100*1e6) 赛时还想了一种自认为更优的做法。 考虑枚举i,枚举完i就能得到r,判断是否满足条件(当然,就像分解质因数那样,n/i也要判断) 然后直接这么写会出点小问题, 阅读全文
摘要:
1002 提供一种不同于正解的做法 重新定义菊花图: 菊花图首先是一棵树,其次存在一个点,它指向的点的度数都为1,剩下的都是度数为1的点。 那么在枚举删去某个点u时,只需要: 1.给u的邻点的度数-1(deg[u]--) 2.维护当前度数不为1的点的个数(代码里的non1) 3.维护 指向的点都为1 阅读全文
摘要:
1005 状压dp,只不过压的是3进制。 模数有坑点,可能模完为0但是方案存在,也要输出。因此多开一个数组表示存不存在。 #include<bits/stdc++.h> using namespace std; const int N=500,K=10,LIM=6e4; const char ch[ 阅读全文
摘要:
很神奇的场hh,大家一起坐牢,多好啊! B 找规律,这种题一般都是多模拟几个数据然后猜出来 #include<bits/stdc++.h> using namespace std; inline int read() { int x=0;bool f=1;char ch=getchar(); for 阅读全文
摘要:
B 显然不能走回头路,如果具体考虑各种情况会很麻烦。 比如箱子在的地方是不是割点,人能不能绕过箱子去到箱子附近..额,总之很麻烦,需要一个通解 那就考虑人先 不经过箱子 走到箱子的邻点的最短距离,可以用一遍bfs解决。 然后再考虑从1号点的某个邻点开始,人拉着箱子怎么走。 可以把人-箱子看成一条有向 阅读全文
摘要:
好吧标题党了一回,但我相信有不少人被出题人的那句“手玩一下就知道了”无语住了 像我这种憨憨一旦想偏了就救不回来了,于是困惑了好久,在雨巨的指导下彻底搞懂 (此处大声谢谢雨巨,又有实力又会讲题又认真答疑每一个问题,呜呜呜我永远的姐) 题意简单来说就是定义f(i)为树上i点到其他所有点的距离之和,给定x 阅读全文