随笔分类 -  算法基础——枚举

摘要:第一个数的范围是[1,2*a],不然不如把它变成1,同理第二位为[1,3*b],第3位可以直接算出来 #include <bits/stdc++.h> #define inf 2333333333333333 #define N 1000010 #define p(a) putchar(a) #de 阅读全文
posted @ 2020-07-22 10:32 WeiAR 阅读(96) 评论(0) 推荐(0) 编辑
摘要:https://codeforces.com/problemset/problem/525/E每个仙女有三种情况,枚举一下,n对半分,使得复杂度变成o(k*3^(n/2))用map统计的时候,每次如果跑for的话会有很多重复的,这样可以直接存下来前缀和 for(auto i:mp){ for(int 阅读全文
posted @ 2020-05-29 22:52 WeiAR 阅读(308) 评论(0) 推荐(0) 编辑
摘要:所有不合法的只有这些可能: ABBBBBB BAAAAAA AAAAAAB BBBBBBA 所以把这些去了就可以了。 #include <bits/stdc++.h> #define inf 2333333333333333 #define N 1000010 #define p(a) putcha 阅读全文
posted @ 2020-05-09 14:53 WeiAR 阅读(209) 评论(0) 推荐(0) 编辑
摘要:https://vjudge.net/contest/365698#problem/J l[i]表示以a[i]为右端点的为负数的情况,r[i]表示为整数。 转移就是这样: if(a[i]<0){ l[i]=r[i-1]+1; r[i]=l[i-1]; } else{ l[i]=l[i-1]; r[i 阅读全文
posted @ 2020-04-03 20:01 WeiAR 阅读(137) 评论(0) 推荐(0) 编辑
摘要:先跑一遍spfa,这样就排除了小于k条边的情况。枚举那k条边中最小的边权,然后让所有的边都减去它,接着跑spfa,然后在加上k*v[i] #include <iostream> #include <cstdio> #include <queue> #include <algorithm> #incl 阅读全文
posted @ 2020-03-25 21:24 WeiAR 阅读(231) 评论(0) 推荐(0) 编辑
摘要:CodeForces - 626D 前缀和+概率cnt[i]表示差为i的数对的数量;sum[]为cnt的前缀和i表示第一回合的差,j表示第二回合的差,i+j小于第3回合,第三回合一共sum[5000]-sun[i+j],最后用组合公式算一下 #include <iostream> #include 阅读全文
posted @ 2020-02-23 22:47 WeiAR 阅读(138) 评论(0) 推荐(0) 编辑
摘要:00001111在前i-1个全相等的情况下,对于位置i,如果a[i]!=a[i-1],要么把前i-1个反转,要么把n-(i-1)位置的反转。按位处理,每次从这两个情况里面取最大值。最后从这些最大值里取最小值就是答案 #include <iostream> #include <cstdio> #inc 阅读全文
posted @ 2020-02-11 17:49 WeiAR 阅读(364) 评论(0) 推荐(0) 编辑
摘要:AtCoder - 3959https://vjudge.net/problem/1583855/origin求最长连续递增长度就行,答案是n-max(len) 阅读全文
posted @ 2019-07-19 19:13 WeiAR 阅读(80) 评论(0) 推荐(0) 编辑
摘要:https://vjudge.net/problem/2198220/origin枚举等差数列第一个和第二个,然后二分确定数列后面是否存在,复杂度比较玄学,卡过了。 也可以dp做,f[j][i]=max(f[j][i],f[i][pre]+1);f[j][i]表示j是等差数列最后一个下标,i是倒数第 阅读全文
posted @ 2019-07-16 20:16 WeiAR 阅读(916) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/gym/100623/attachments H题已经给出来的,包括后来添加的,都累加得到ans,那么从1~ans都是可以凑出来的,如果ans<a[now]-1,那么就添加一个ans+1,然后继续操作。 1 #include<iostream> 2 #in 阅读全文
posted @ 2019-04-30 23:17 WeiAR 阅读(135) 评论(0) 推荐(0) 编辑
摘要:2013年山东省赛F题 Mountain Subsequences先说n^2做法,从第1个,(假设当前是第i个)到第i-1个位置上哪些比第i位的小,那也就意味着a[i]可以接在它后面,f1[i]表示从第一个开始,以a[i]为结尾的不同递增序列的个数,要加上1,算上本身。正反各跑一遍,答案加一下(f1 阅读全文
posted @ 2019-04-28 20:35 WeiAR 阅读(108) 评论(0) 推荐(0) 编辑
摘要:I - Infinite Improbability Drivehttp://codeforces.com/gym/241750/problem/I不断构造,先填n-1个0,然后能放1就放1,最后这个序列的长度就是(1<<n)+n-1,也就是每添加1位就要匹配出来一个。 1 #include<ios 阅读全文
posted @ 2019-04-05 16:57 WeiAR 阅读(202) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/gym/241680/problem/B比赛的时候考虑的是,它们3个尽可能接近,然后好麻烦,不如暴力枚举,这里不需要质因数分解,而是两重循环枚举所有因数,第3个因数也就随之确定 1 #include<iostream> 2 #include<cstdio> 阅读全文
posted @ 2019-04-05 09:59 WeiAR 阅读(108) 评论(0) 推荐(0) 编辑
摘要:Gym 100963B啊,郁闷,就tm调小了一点范围就A了,就写dp和贪心比较一下,范围到最大值的二倍-1就好了假设最大值的2倍以内能满足最优条件,当金额范围超过最大值2倍的时候;至于为什么,还不清楚,再想想 #include<iostream> #include<cstdio> #include< 阅读全文
posted @ 2019-03-26 11:33 WeiAR 阅读(198) 评论(0) 推荐(0) 编辑
摘要:poj 1753做搜索题还是要找到特殊性质和枚举方式哪怕很简单的性质,也会产生很大的影响在这个题中,同一个格子翻2次和不翻没有区别,在这里有一个小细节就是可以有impossible的情况,这也意味着所有情况都可以在规定时间内枚举到,这也就是你枚举所有情况就可以了。这题还有一个巧妙的方法如果第一行是确 阅读全文
posted @ 2019-01-23 19:11 WeiAR 阅读(135) 评论(0) 推荐(0) 编辑
摘要:P2659 美丽的序列对于当前的最小值,找到最大的左右边界,然后更新答案。用单调队列确定左右边界,O(n)做法。 阅读全文
posted @ 2017-11-02 20:05 WeiAR 阅读(176) 评论(0) 推荐(0) 编辑
摘要:B. Divisiblity of Differencestime limit per test1 secondmemory limit per test512 megabytesinputstandard inputoutputstandard outputYou are given a mult 阅读全文
posted @ 2017-11-01 21:18 WeiAR 阅读(160) 评论(0) 推荐(0) 编辑
摘要:P2837 晚餐队列安排对程序有新的理解难度:读懂题&&准确地从题中提取有效信息>设计算法>代码实践mmp,我看错题啦。前缀和&&枚举断点即可 1 #include<queue> 2 #include<algorithm> 3 #include<cmath> 4 #include<ctime> 5 阅读全文
posted @ 2017-10-18 21:09 WeiAR 阅读(242) 评论(0) 推荐(0) 编辑
摘要:P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold我比赛的时候A了,luogu上25分,QAQ,又憨又傻的200+代码,我为什么要干电脑干的事情,无语了。如果左边<右边,取左如果右边<左边,取右如果相等,就向中间找,直到找到第一个不同的,然后给电脑指明下一步是取 阅读全文
posted @ 2017-10-18 17:44 WeiAR 阅读(162) 评论(0) 推荐(0) 编辑
摘要:P1203 [USACO1.1]坏掉的项链Broken Necklace不错的断环为链的模拟题,开成三倍,有很多细节要考虑,比如总长度要<=n,开头第一个是w等等。 阅读全文
posted @ 2017-10-17 08:38 WeiAR 阅读(324) 评论(0) 推荐(0) 编辑