摘要:很像二维偏序,我们把武器和怪物放在一起排序按照攻击力递增的顺序,顺序扫描,这样攻击力满足了要求,然后防御力可以用一个线段树来处理,具体看代码 #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include
阅读全文
摘要:集合的大小不会超过三 #include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t ; i++) #def
阅读全文
摘要:#include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t ; i++) #define fi firs
阅读全文
摘要:#include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t ; i++) #define fi firs
阅读全文
摘要:题解: 首先我们转化下思维,题目上说用1 5 10 50 ,我们选择用0 4 9 49,这样我们只需要去考虑序列中4 9 49 的个数就可以了 这道题的难点在于一个数可能会有多种表示方法,为了避免重复,我们表示每一个数的时候应该用唯一的方式去表示他 因此对于一个数,我们先尽量去用49凑,再用9去凑,
阅读全文
摘要:每一个数都是 p*q p^2 p^3 p^4 的形式,分类讨论即可 #include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ;
阅读全文
摘要:#include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t ; i++) #define fi firs
阅读全文
摘要:题解:起点位置固定,枚举终点即可 #include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t ; i++
阅读全文
摘要:题意简述:给出N个点,任意两点之间有一条直线,问共有多少对直线相交?(N<=2000) 官方代码如下 #include <cstdio> #include <map> #include <set> #include <utility> const int N = 1001; int x[N], y[
阅读全文
摘要:#include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t ; i++) #define fi firs
阅读全文
摘要:第一次做感觉无从下手,这个结论也是不好发现 #include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t
阅读全文
摘要:题意简述:找到1121231234.。。。这个序列的第k个数字是多少 k<=1e18 很经典的问题,但是也不太好写,代码来自官方题解 #include <bits/stdc++.h> using namespace std; long long get(long long r) { return (
阅读全文
摘要:比较常见的题型,应该递推求解 #include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t ; i++)
阅读全文
摘要:题意简述:给出n,p,w,d,找到满足下面要求的一组解,x,y,z>=0 扩展欧几里得会爆longlong,但是注意观察可以发现,如果有解y<w一定有解,因为d*w可以让x去凑 #include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i
阅读全文
摘要:题意简述:给出一个01数组,每次你可以选择一个x,然后让a[x]=a[x]+a[x-1] ,a[x-1]=0,or a[x]=a[x]+a[x+1],a[x+1]=0, 要求用最少的操作次数使得至少存在一个数K>1,使得K|a[x]对于数组中每一个数 题解:显然K应该是数组总和的因数,对于一个因数,
阅读全文
摘要:题意简述:给出n个APP的种类,你要用屏幕来安置这n个APP,屏幕大小由你确定,同一种APP只能放在一个屏幕中,并且一个屏幕要么被放慢,要么离放慢差一个 要你求出最少需要多少个屏幕,不需要输出屏幕大小(屏幕大小由你确定)n<=2e5 题解:屏幕大小不会超过所有种类中APP数目最少的那种,因此暴力枚举
阅读全文
摘要:题意:给出一个n*m的矩阵,矩阵中的元素要么P要么是A 每次可以选择一个的子矩形,然后将矩阵中每一行都变为第一行,或者将矩阵中每一列都变为第一列 要求用最少的次数将矩阵中所有元素都变成A 题解:分类讨论,最多四次操作 #include<bits/stdc++.h> #define forn(i, n
阅读全文
摘要:题意简述:给一个矩阵,有两种操作可以进行 操作1:改变矩阵中一个元素的值 操作2:将矩阵中某一列的值循环下移 要求用最少的操作次数使得矩阵变成 题解:对于一列来说,我们肯定是先变化然后再循环下移,所以应该考虑变化哪些数字,而要知道变化哪些数字必须知道变化之后对应哪个循环, 比如3 1 4 ,可以变为
阅读全文
摘要:题意简述:矩阵中有的点不能走,你每次可从四个方向走,至少走一步,最多走k步(不能横跨那些不能走的格子),问从(sx,sy)走到(tx,ty)的最短时间是多少? 题意:利用set来加速bfs的过程,原理是一个点一旦走过就不需要再去走了,具体看代码 #include <bits/stdc++.h> us
阅读全文
摘要:题意简述:往n*m的网格中放k条鱼,一个网格最多放一条鱼,然后用一个r*r的网随机去捞鱼,问怎么怎么放鱼能使得捞鱼的期望最大,输出这个期望 题解:肯定优先往中间放,这里k不大,因此有别的简单方法,否则推公式各种情况烦死人,我们对于每一行来说将中间的数加进去,然后用set来维护k次就好了 #inclu
阅读全文