摘要:集合的大小不会超过三 #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
阅读全文
摘要:题解: 首先我们转化下思维,题目上说用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++) #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 ,可以变为
阅读全文
摘要:题意简述:一个包含n个点的完全图,点的编号从0开始,两个点之间的权值等于两个点编号的异或值,求这个图的最小生成树 规律是 ∑ i from 0 to n-1 (i&-i) #include <iostream> using namespace std; int main() { long long
阅读全文
摘要:题意简述:数组a经过一系列操作之后获得数组b,给你数组b,构造出一个满足条件的数组a 操作如下从左到右扫描数组a,如果是一个素数,那么把第这个素数的素数加到数组a中,例如a[1]=2那么加3到数组a当中 如果是一个和数,那么把这个和数的最大因数加进去,这个因数不能等于他本身 只操作N次,N为数组a的
阅读全文
摘要:关于计算期望的题,具体解法书上已经说的很清楚了 有一个值得注意的事项,就是我们枚举每一位的时候,应该选择从最低位往最高位枚举 否则最终答案会出错,主要是因为浮点数计算出的问题,因为懒得测试,但根据数值书上学的可能原因应该是计算过程后期所加的数很小,两者数量级相差太大,导致小数被吃掉 因为测试数据最终
阅读全文