随笔分类 - 枚举
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 紫书上的原题; "链接" 【代码】 cpp include define ll long long using namespace std; const int N = 1e5; ll m,c1,c2,v1,v2; int ma
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 用pre[i][j]表示第i行前j列的和。 然后枚举连续座位的最左上点。 (有两种可能向右或向下k个。 则还需要处理出pre2[i][j]表示第j列前i行的和。 (都可以O(N^2)求出 然后pre[i][j+k 1] pre[
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 直接暴力求出第k个perfect数字就好。 纯模拟。 【代码】 cpp include define double long double using namespace std; int n; int _judge(int x
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 就是让你求m (ai/bb)的最小值 【代码】 cpp include define double long double using namespace std; int n,m; int main(){ ifdef LOCA
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 遍历i从1..n 看看x%i==0以及x/i 【代码】 cpp include using namespace std; int main() { int n,x; cin n x; int ans = 0; for (int
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 O(n^2)枚举每一个区间。 然后维护这个区间里面的“统治数字"是什么。 对于每个区间cnt[统治数字]++; 【代码】 cpp include using namespace std; const int N = 5000+1
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举第一种方法。 剩下的全都个第二种方法。 看看能组成多少个队伍就可以了。 【代码】 cpp include define ll long long using namespace std; int n,m; int main(
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 让你在n的因子里面找一个最大的数字x 且x的因子全都不是完全平方数(y^2,y 1) O(sqrt(n))找出n的所有因子。 然后O(sqrt(n))处理出1..N内的所有完全平方数。 用map存 对于x,看看它的因子里面有没有
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举序列的头两个数字是什么 O(N^2) 然后头两个数字确定之后。 f[3],f[4]..就确定了 只需查看f[3],f[4]..是不是存在就好了。 但是这样复杂度看起来是O(N^3)的了。 其实不然,a[n] = a[n 1]
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 1 2 3 ... n中末尾0的个数 只会由素因子2和5的个数决定且等于 Min{cnt[2],cnt[5]} 且素因子2的个数一定会比5多; 所以n!的末尾0的个数 等于for (int i = 1;i 【代码】 cpp in
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 先求出c b x的所有可能 存在map里面 然后枚举y看看a y在不在map里面 在的话就有解。 这样复杂度是$O(N log_2N)$的 比直接两层循环枚举的$O(N^2)$复杂度要来的好 这种方法也叫"中途相遇法" 【代码】
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 记录每个数字出现的次数cnt[x]; (大于1e6的直接忽略) 另外用一个数组z[1e6] 然后for枚举x 第二层for枚举x的倍数(倍数不超过m) 即for (int i = x;i 【代码】 cpp include usi
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 写个前缀和 和 一个后缀和。 (即前i个字符A所代表的数字的和以及前i个字符B所代表的数字的和。。 然后枚举前i个字符翻转。 求B对应数字的最大值 枚举i..n这些字符翻转 求B对应数字的最大值 两个同时求最大值就是答案了。 【
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 把n分解成二进制的形式。 n=2^a0+2^a1+...+2^a[q 1] 则固定就是长度为q的序列。 要想扩展为长为k的序列。 可以把2^x转化为2^(x 1)+2^(x 1)的形式. 这样序列的长度就+1了 它要求max{a
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 找到任意一个环。 然后枚举删掉其中的某一条边即可。 (因为肯定要删掉这个环的,那么方法自然就是删掉其中的某一条边 (其它环,如果都包括这条边,那么就可以,否则,某个环不包括那也没办法,自然就无解了。 这样枚举的边的数目最多是50
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举用哪一个桶就好 【代码】 cpp include using namespace std; int n,k,x; int main(){ ifdef LOCAL_DEFINE freopen("rush_in.txt", "
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举1的位置在i 往右摆成一排。 a[i+1]..a[n]..a[1]..a[i 1]变为有序的 寻找循环节,每个循环节的长度 1是必要的步骤数 获取必要的步骤数,取最小值。 O(n^2) 往左排成一排 同样的方法处理就好 【代
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 显然中间相遇。 自己写了个hash处理一下冲突就可以了。 【代码】 cpp / 1.Shoud it use long long ? 2.Have you ever test several sample(at least th
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举前i 1个圆。 哪些圆和它相交。 取圆心纵坐标最大的那个圆就可以了。 【代码】 cpp include using namespace std; const int N = 1e3; vector now; int a[N+
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 排列中交换任意两个数字。 排列的逆序对个数的奇偶性会发生变化。 翻转这个过程其实就是len/2对数字发生交换。 交换了偶数次的话,不变,否则奇偶性发生改变。 先暴力求出一开始的逆序对个数就好 【代码】
阅读全文

浙公网安备 33010602011771号