12 2020 档案
摘要:前缀和好题,但不知道为什么标签是 数论。\color{blue} \text{数论。}数论。 然后将前缀和加进去最后暴力枚举一下。但这里注意,暴力时如果已经超过了n那么就得终止循环,不然你会得到TLE。 代码如下: #include <iostream> #include <vector> usin
阅读全文
摘要:公式变形: ∵ax+by+c=0\large∵ ax + by + c = 0∵ax+by+c=0 ∴ax+by=−c\large∴ ax + by = -c∴ax+by=−c 然后就请出我们的贝祖(也叫pei shu)定理: ax+by=n\large ax + by = nax+by=n 且 a
阅读全文
摘要:小学学拓欧真疯了!表示难以看懂,只好套个模板。 给出一点解释: 在欧几里得算法最后一步中,b=0\large b = 0b=0,显然可以发现一组x=1, y=0\large x = 1, \,y = 0x=1,y=0满足ax+by=gcd(a,b)\large ax + by = gcd(a, b)
阅读全文
摘要:给一个map做法与普通做法 分解质因数其实并不难,可以每次边统计边输出,也可以用map,将i当为key值,cnt为值,最后输出。 两种代码: 1、map #include <iostream> #include <map> using namespace std; #define fast_io i
阅读全文
摘要:真的想问CF的评测机速度有多快,O(n3n^3n3)都能过 代码: #include <stdio.h> int main() { int n, cnt = 0; scanf("%d", &n); for(register int i = 1; i <= n; i++) { for(register
阅读全文
摘要:只需要一直输出a,b,c,可以满足回文子串最长长度为1,代码: #include <stdio.h> int main() { int t; scanf("%d", &t); while(t--) { int n; scanf("%d%*d", &n); //%*d是指输入但不保存 n--; for
阅读全文
摘要:#include <iostream> using namespace std; int main() { int n; cin >> n; if(n == 1) cout << " 1\n"; if(n == 2) cout <<" 1 2\n 4 3\n"; if(n == 3) { cout
阅读全文
摘要:这题真是细节多。但是算法很好掌握。 对于n\large nn,将其分解质因数,可以得到: n=p1∗p2∗p3……∗pn\Large n = p_1 * p_2 * p_3 …… * p_nn=p1∗p2∗p3……∗pn 如果其质因数个数小于k,无解。 如果其质因数个数等于k,全部输出。 如
阅读全文
摘要:求过。 STL大法好! 本题是set好题,将三个数加起来存到set中,既可以去掉重复的,还能从小到大排序! 但是有个大问题!如何输出那个第三大的?set是不能用下标访问的!我们的确可以用end返回的迭代器三次自减然后输出,类似第一篇题解。不过我这里给大家介绍另一种迭代器类型,那就是:reverse_
阅读全文
摘要:本题与括号匹配相似 我用的两个栈 好吧,这种题目用vector的erase都能过,况且这个vector常数小 而大家都是用栈,我也用。 代码: #include <iostream> #include <stack> #include <string> using namespace std; st
阅读全文
摘要:很基础的贪心。 将血量排序,把前k大的全删掉,剩下的加起来就是答案。 这里我使用的是 priority_queue,不用排序,STL帮忙。默认从小到大,用 greater可以从大到小。 #include <cstdio> #include <queue> #include <vector> usin
阅读全文
摘要:因为这里说的满足k个子序列和为s,只需要输出k个s,然后用其他数填充接下来的 至于用什么数呢?随便…… 乱敲一个长一点的数就行了 代码: #include <iostream> using namespace std; int main() { ios::sync_with_stdio(false)
阅读全文
摘要:每次除以k,答案加1,因为只有2至10进制,不用考虑字母 代码: #include <iostream> using namespace std; int main() { int n, k, cnt = 0; cin >> n >> k; while(n) { cnt++; n /= k; } c
阅读全文
摘要:这道题目真是红!而我没用if,因为对于每种比赛而言,设rank \large rank\,rank = 排名,只要排名前3以内,其获得奖金为: (3 − rank + 1) ∗ 100000)\Large (3\, -\, rank\, + \,1) \,* \,100000)(3−rank+1)∗
阅读全文
摘要:对于本题,可以开一个二维数组,每次统计当前天数考试人数,最终输出 代码: #include <iostream> using namespace std; bool a[1005][1005]; //定义二维数组 int main() { int n,m,k; cin>>n>>m>>k; for(i
阅读全文
摘要:对于 ai>bi\large a_i > b_iai>bi,sum1+=ai−bi\large sum1 += a_i - b_isum1+=ai−bi 对于 ai<bi\large a_i < b_iai<bi,sum1+=ai−bi2\large sum1 += \frac{a_i
阅读全文
摘要:本题不需要数组,只需要一个递归,边输出边统计1的个数 其实本题是位运算模板题,通过每次右移并且进行逻辑与运算就可得出1的个数。因为短除法是要从后往前输出,我们就利用递归输出,并且在递归时顺便进行统计。 做完本题的可以去做 CSP−J2020 T1\large CSP-J2020\ T1CSP−J20
阅读全文
摘要:先来找规律: 对于有数的来说,y轴跟x轴相等或者与x轴差2 那么对于有数的来说,如果i为奇数,通项公式为: ai=x+y−1\huge a_i = x + y - 1ai=x+y−1 如果i为偶数,通项公式为: ai=x+y\huge a_i = x + yai=x+y 对于(0, 0)同样适用
阅读全文
摘要:第一次过灰题,庆祝庆祝 前埔知识:等差数列求和公式 ∑in = (i + n) ∗ (n − i + 1)2 \LARGE \sum_{i}^n \, = \,\frac {(i \,+ \,n) \,*\, (n \,- \,i\, + \,1)}{2}∑in=2(i+n)∗(n−i+1) 推
阅读全文
摘要:遇到这种题目,尽管是红题,但也要注意复杂度,O(n3n^3n3)是过不去的。 那么我们先想想有没有O(n2n^2n2)的方法。如果已经循环了两层,那么第三层的数加上去要为s,那么第三层的数不就是: s - 第一层 - 第二层 那么就不用第3层循环了 代码如下: #include <iostream>
阅读全文