02 2020 档案

摘要:pass 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 int t1[110000],t2[110000],rk[110000],uni[10],c[10]; 5 int n; 6 int get(int *x 阅读全文
posted @ 2020-02-23 16:13 IAT14 阅读(149) 评论(0) 推荐(0)
摘要:pass 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 using namespace std; 6 const int MAXN = 1100000; 7 int cnt,n 阅读全文
posted @ 2020-02-23 14:36 IAT14 阅读(229) 评论(0) 推荐(0)
摘要:1422 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 struct dat 5 { 6 int s,f; 7 } a[1100]; 8 int res,n,t; 9 bool cmp(dat x,dat y) 阅读全文
posted @ 2020-02-19 15:10 IAT14 阅读(521) 评论(0) 推荐(0)
摘要:pass 1 #include <algorithm> 2 #include <cstdio> 3 using namespace std; 4 const int MAXN = 210000; 5 int n,m,tot,cnt; 6 int vec[MAXN],num[MAXN],hsh[MAX 阅读全文
posted @ 2020-02-16 15:07 IAT14 阅读(162) 评论(0) 推荐(0)
摘要:这道题最初的想法是,所有的合法图案都由中间的那个核心的四个格子扩展而成,所以想把核心找出来,用数据结构维护,每次找出询问范围内可以扩展最大的核心。 仔细想想这样子可能会涉及到二维的数据结构,可能的复杂度也过高,有些想骗了。 考虑DP,dp[i][j][k]表示,以i,j为右下角,边长为k的正方形中, 阅读全文
posted @ 2020-02-16 08:46 IAT14 阅读(177) 评论(0) 推荐(0)
摘要:一定有一种走法可以把图中的所有边都遍历一遍。 怎么走,我们想办法把每一行都用一样的走法。 先直接往右走,然后往左走,然后往下,以此类推为基本想法。 那么除了左右两边,其他的竖向边都无法被顾及到怎么办?先整体横着走,再整体竖着走?发现不行。 所以我们往左走变成,下,上,左。这样子边向左走边把所有竖向边 阅读全文
posted @ 2020-02-16 08:36 IAT14 阅读(228) 评论(0) 推荐(0)
摘要:这道题觉得很巧妙。 让含1的子串尽可能多,就是全为0的子串尽可能少。(注意是全为0,不是有0,开始这里想当然然后就卡住了=.=)。 总的子串数就是(1,1)(1,2)...(1,n)(2,2)..(2,n)..(n,n),显然是(n+1) * n/2。 我们考虑全为0的串数。我们有m个1,相当于有m 阅读全文
posted @ 2020-02-16 08:32 IAT14 阅读(203) 评论(0) 推荐(0)
摘要:对于-1而言,取相邻数最大最小中间值即可。 记得考虑非-1的数对答案也有影响。 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 int T,minn,maxn,n,k,r 阅读全文
posted @ 2020-02-16 08:25 IAT14 阅读(189) 评论(0) 推荐(0)
摘要:对应位要么全相等,要么ac,bc有一个相等,ab不行。 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 char a[110],b[110],c[110]; 5 int len,T; 6 bool suc; 7 bo 阅读全文
posted @ 2020-02-16 08:23 IAT14 阅读(233) 评论(0) 推荐(0)
摘要:1274 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> #include <queue> using namespace std; const int inf 阅读全文
posted @ 2020-02-10 15:42 IAT14 阅读(259) 评论(0) 推荐(0)
摘要:0边把图分成两个部分,这两个部分的路径之间,mex起码为1,都对答案产生1的贡献。 然后1边接在0边旁边,把图分成了更小的两个部分(0,1的两端),和一些不会再产生新的贡献的区域,这两个更小的部分路径之间,mex起码为2,都对答案又产生了1的贡献。(他们在刚刚算mex起码为1的时候,已经贡献过1了, 阅读全文
posted @ 2020-02-10 10:49 IAT14 阅读(133) 评论(0) 推荐(0)
摘要:我们倒着看,如果当前水桶 比右面水桶多,就把他俩匀一下。然后再往右接着看,如果匀过的这两个比右面第三个大,就把他们三个一起匀一下,复杂度O(N^2)。 我们考虑优化,如果一段被匀了之后,那么他们水位相同,之后要匀也一定是一起匀,就可以看作一个整体了。每个水桶只会被加入到整体一次,我们维护下每一段的开 阅读全文
posted @ 2020-02-10 10:18 IAT14 阅读(190) 评论(0) 推荐(0)
摘要:题意没有太读懂...导致我没写完。 就是按照顺时针给你一些点,问这些点是否中心对称。 就用1和n/2+1,求一个中心点。然后看2和n/2+2,3和n/2+3...所求出的中心点是不是一个同一个就行了。 注意n为奇数一定不行。 1 #include <cstdio> 2 #include <cmath 阅读全文
posted @ 2020-02-10 10:16 IAT14 阅读(200) 评论(0) 推荐(0)
摘要:那个函数的功能f(x,y)就是把y有1的位置,对应的x位置也都变成0。所以我们发现只有第一个数不同会带来结果变化,后面怎么排序没关系。 我们考虑那个数当第一个数最后结果最大。我们记录下二进制下每一位,出现过多少个1。然后依次枚举每个数当第一个数,然后把这个数1的位置对应出现1次数减去1,如果变0了, 阅读全文
posted @ 2020-02-10 10:14 IAT14 阅读(209) 评论(0) 推荐(0)
摘要:排序后,中间相邻的两个分别作为两个班级的中位数必定最优。 因为两个中位数必定一个在前半段,一个在后半段,那么显然中间两个差值最小。 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 int a[210000],T, 阅读全文
posted @ 2020-02-10 10:11 IAT14 阅读(224) 评论(0) 推荐(0)
摘要:把所有0加成1,乘积不为0。 如果求和为0,就随便选一个正数再+1就行。如果没有正数,那么显然和为负数也不为0。 1 #include <cstdio> 2 using namespace std; 3 int T,n,res,sum,a[110]; 4 int main() 5 { 6 for ( 阅读全文
posted @ 2020-02-10 10:09 IAT14 阅读(165) 评论(0) 推荐(0)
摘要:x和y的系数,常数项,本身均为正。整个图像以指数级别向右上跑。我们必定是从起点出发,到一个点后,一直向下或一直向上。 所以我们就枚举走的这一段的边界,然后看上下端点哪个和起点近取那段就好。因为坐标指数级别增加,所以可能到达的点数不会本多,O(N^2)枚举完全可以接受。 c++WA了,应该是炸long 阅读全文
posted @ 2020-02-07 09:59 IAT14 阅读(203) 评论(0) 推荐(0)
摘要:一定是两个障碍物组成一对来破坏连通性,每个障碍物可能属于最多3对,然后维护障碍物对数就行。但是懒得讨论,暴力分块过了。 涉及到修改的块暴力重构这个块的连通性。只要左端两个位置和右端两个位置中任意两个可互达就具有连通性。 然后每次询问,就先看每个块的连通性,再看每个块之间是否成功的连接起来。 1 #i 阅读全文
posted @ 2020-02-07 09:56 IAT14 阅读(163) 评论(0) 推荐(0)
摘要:如果f[x]表示有x个对手时候的最大获益。不难看出f[x] = max(f[i] + 1 - i / x)。i表示这次答题后剩下几个队首。 不难看出,随着x的增加,最大转移的i也是单调的,然后单调性优化下就可以了。 1 #include <cstdio> 2 using namespace std; 阅读全文
posted @ 2020-02-07 09:53 IAT14 阅读(194) 评论(0) 推荐(0)
摘要:不能吃饭的楼层有限,分类讨论下就好。没注意lower_bound查不到会出界这个问题,卡了好久...... 用map当数组做应该会更简单。 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 int T,n,s,k, 阅读全文
posted @ 2020-02-07 09:50 IAT14 阅读(135) 评论(0) 推荐(0)
摘要:A 1 #include <cstdio> 2 using namespace std; 3 int T,n,sum,num[3100]; 4 char str[3100]; 5 bool suc; 6 int main() 7 { 8 for (scanf("%d",&T);T;T--) 9 { 阅读全文
posted @ 2020-02-05 14:33 IAT14 阅读(208) 评论(0) 推荐(0)
摘要:问因数<3的数个数,是否小于给定区间1/3。因数<3除了1以外等价于素数。 据说杜教筛改成求素数前缀和的版本可以暴力做,但是并不会。 我们一个直观感受是,素数是越来越稀疏的,打表发现,50以外长度30以上,一定满足。而长度不到30的,用根号算法暴力判断每个元素即可。 注意要以乘代除,或者起码除dou 阅读全文
posted @ 2020-02-02 17:17 IAT14 阅读(445) 评论(0) 推荐(0)
摘要:链接 给你一颗以1为根,2^5的树。让你求出以每个点为根的子树中,到子树中每个点距离和最小的点。 首先先做条件转化,到子树中每个点距离和最小,等价于重心,所以问题变成了求每棵子树的重心。 我们考虑如果用子树重心求出父亲的重心。发现一个显而易见的结论,父亲子树的重心,一定在重儿子子树的重心到根的连线上 阅读全文
posted @ 2020-02-02 17:06 IAT14 阅读(533) 评论(0) 推荐(0)
摘要:pass 首先,个人觉得把这个数据结构理解成树状数组套主席树是十分不严谨的。主席树的本质是可持久化权值线段树与前缀和思想的结合。而动态主席树是可持久化权值线段树与树状数组思想的结合。并非树套树般的泾渭分明的叠加。 其次,大概讲下对动态主席树的理解。我们静态主席树中,第i个版本维护的是[1,i]的权值 阅读全文
posted @ 2020-02-02 16:39 IAT14 阅读(183) 评论(0) 推荐(0)