随笔分类 -  蓝桥杯

摘要:题目分析 本题采用差分数组,便于将一个区间的数全部减一,初始化height[1]=h(表示当前所有的牛身高都是h,因为height数组在全局变量中,所以全部为0,根据差分数组的性质:差分数组的前缀和(b[1]+b[2]+...+b[i])等于数组中的某个元素(a[i]))。有上述分析可知,区间不会有 阅读全文
posted @ 2019-11-08 20:30 青衫客36 阅读(178) 评论(0) 推荐(0) 编辑
摘要:将差分数组中所有的正数相加求和记作a,所有的负数相加求和记作b(此处负数的和为正值) 假设a = 5, b = 6那么正数5和负数5可以抵消,剩下的1进行一次+1/-1操作,此时共进行了min(a, b) + abs(a - b) = max(a, b)次 对于结果的种类,因为数列中的数全部一样,即 阅读全文
posted @ 2019-11-08 20:29 青衫客36 阅读(143) 评论(0) 推荐(0) 编辑
摘要:假设边长为2,该题就是将边长为2的正方形从左到右平移,然后换下一行从左到右平移,边平移边记录该区域内的总值,最终取一个最大的 /* 前缀和: a[1], a[2], a[3], ... a[n] s[i] = a[1] + a[2] + ... + a[i] a[3] + a[4] + ... + 阅读全文
posted @ 2019-11-07 10:37 青衫客36 阅读(114) 评论(0) 推荐(0) 编辑
摘要:将递归改成非递归,将递归入口改成对应的if...else...条件语句,在其中执行相同的操作 #include <iostream> #include <stack> using namespace std; int n, m; struct State { int pos, u, sum, sta 阅读全文
posted @ 2019-11-06 20:35 青衫客36 阅读(123) 评论(0) 推荐(0) 编辑
摘要:感谢lyn大佬的指导,感谢CSDN博主「昂昂累世士」的博客 刚开始一直是以城区一的中心为原点,然后图一的四个点坐标分别为:(-1,1),(1,1),(1,-1),(-1,-1)左上角:(x,y)关于原点顺时针90度旋转得到(y,-x)再关于y轴轴对称变换得到(-y,-x);右上角:(x,y)向右平移 阅读全文
posted @ 2019-11-06 19:34 青衫客36 阅读(145) 评论(0) 推荐(0) 编辑
摘要:/* A = p1^k1 * p2^k2 * ... * pn^kn 所有的约数的个数: (k1 + 1) * (k2 + 1) * ... * (kn + 1) 所有的约数之和: (p1^0 + p1^1 + ... + p1^k1) * (p2^0 + p2^1 + ... + p2^k2) * ... * (pn^0 + pn^1 + ... + pn^kn) */ /* sum(p, k) 阅读全文
posted @ 2019-11-02 10:23 青衫客36 阅读(187) 评论(0) 推荐(0) 编辑
摘要:d[i]表示在三根木棍的情况下,i个盘子要走d[i]步(注意,d[i] 当前i个盘子,三根木棍均可走) f[i]表示在四根木棍的情况下,i个盘子要走的最短步数f[i]步(注意,f[i] 当前i个盘子,四根木棍均可走) f[j] * 2 或 d[i - 1] * 2 表示拿下j(或i - 1)个盘子放 阅读全文
posted @ 2019-11-01 19:33 青衫客36 阅读(162) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> #include <cstring> using namespace std; const int INF = 0x3f3f3f3f; char g[10][10]; int dx[5] = {0, -1, 0, 1, 0}, dy[5] = {0, 0, 1, 0, -1}; void turn(int x, int y) { for(int i = 0; 阅读全文
posted @ 2019-11-01 19:24 青衫客36 阅读(132) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> #include <vector> using namespace std; int n; vector<int> path; void dfs(int u, int state) { if(u == n) { for(auto x : path) cout << x << " "; cout << endl; return ; } for(int i = 阅读全文
posted @ 2019-10-27 21:14 青衫客36 阅读(148) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> using namespace std; int n, m; void dfs(int u, int sum, int state) { // 判断边界条件 // 如果加上剩余的数都不够m个,直接return if(sum + n - u < m) return ; // 当达到m个数的时候 if(sum == m) { for(int i = 0; i < 阅读全文
posted @ 2019-10-27 20:47 青衫客36 阅读(141) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> using namespace std; int n; void dfs(int u, int state) { if(u == n) { for(int i = 0; i < n; ++ i) if(state >> i & 1) cout << i + 1 << " "; cout << endl; return ; } dfs(u + 1, state 阅读全文
posted @ 2019-10-27 20:23 青衫客36 阅读(139) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> #include <cstring> #include <algorithm> using namespace std; /* 1. 哪些点被用过 2. 目前停在哪个点上 2^20 * 20 => 2*10^7 f[state][j]: state表示当前哪个点被用过, j表示最后停在哪个点上 f[state][j] = f[state_k][k] + we 阅读全文
posted @ 2019-10-24 18:45 青衫客36 阅读(108) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> using namespace std; int main() { long long a, b, p; cin >> a >> b >> p; long long res = 0; while(b) { if(b & 1) res = (res + a) % p; a = (a + a) % p; b >>= 1; } cout << res << end 阅读全文
posted @ 2019-10-20 19:15 青衫客36 阅读(193) 评论(0) 推荐(0) 编辑
摘要:#include using namespace std; int main() { long long a, b, p; cin >> a >> b >> p; long long res = 1 % p; //此处若不mod p,则测试用例为 123456789 0 1 时,会输出1,但应该输出0 while(b) { if(b & 1) res = res *... 阅读全文
posted @ 2019-10-20 18:25 青衫客36 阅读(124) 评论(0) 推荐(0) 编辑
摘要:汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。 一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16行,布局是: 第1 阅读全文
posted @ 2019-03-21 13:45 青衫客36 阅读(205) 评论(0) 推荐(0) 编辑
摘要:如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?5650 4542 3554 473 946 4114 3871 9073 90 43292758 7949 6113 5659 5245 7432 3051 4434 6704 35949937 1173 6866 3397 阅读全文
posted @ 2019-03-21 09:21 青衫客36 阅读(172) 评论(0) 推荐(0) 编辑
摘要:x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的 阅读全文
posted @ 2019-03-21 09:18 青衫客36 阅读(246) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示