AtCoder Beginner Contest 255 A—E
A
题目描述
给定一个的$ \ 2 \times 2 \ $矩阵$ \ A \ $,输出其中的值$ \ A_{R,C} \ $。
题目分析
时间复杂度:$O(1)$。
输入就行嘞。
$Code$
123456789101112131415int n, m;int a[10][10]; int main(){ cin >> n >> m; for(int i = 1; i <= 2; i ++ ) for(int j = 1; j <= 2; j ++ ) cin >> a[i][j]; cout << a[n][m] << endl; return 0;}
$ \ $
$ \ $
B
题目描述
有$ \ N \ $个人在位置为$(X_i,Y_i)$的位置上。
其中有$ \ K \ $个人是特殊人~~(被选中的孩子)~~,能够发射光芒。
当一个人位于$ \ (x,y) \ $坐标发射半径为$ \ R \ $的光芒时候,能够照亮以$ \ (x,y) \ $为圆心,半径为$ \ R \ $ ...
AtCoder Beginner Contest 252 A—F
本题解思路来自这两位大佬 cup-pyy 、 GoodCoder666
A
题目描述
输出一个数字对应的ASCII码。
题目分析
时间复杂度:$O(1)$。
$Code$
1234567int main(){ int n; cin >> n; cout << (char)n << endl; return 0;}
$ \ $
$ \ $
B
题目描述
高桥有$ \ N \ $个食物,第 $ \ i \ $个食物有个美味程度$ \ A_i\ $。
在这些食物中,他有$ \ K \ $个不喜欢的食物,下标分别为$i = 1,2,…,K$。
高桥会选择美味程度最大的品尝,他是否会吃到他不喜欢的食物呢?
如果吃到了输出Yes,否则输出No。
题目分析
时间复杂度:$O(n)$。
我们用$ \ a \ $数组记录每个食物的美味程度,用$ \ b \ $布尔数组记录高桥不喜欢的食物。
用$ \ maxv \ $记录美味程度最大的值。
遍历$ \ a \ $数组,如果找到
maxv == a[i] && b[i],则说明当 ...
AtCoder Beginner Contest 254 A—D
A
题目描述
给定一个至少为100的数字,输出它的十位和个位。
题目分析
时间复杂度:$O(1)$。
枚举即可。
$Code$
1234567891011int main(){ string s; cin >> s; int len = s.size(); cout << s[len - 2] << s[len - 1] << endl; return 0;}
$ \ $
$ \ $
B
题目描述
找到$n$行如下定义的数组:
第$ \ i \ $行的数组长度为$ \ i \ $。
对于第$ \ i \ $行$ \ j \ $列的元素需要满足 如下定义:
$a_{i,j} \ = \ 1。如果j \ = \ 1 \ 或者 \ j \ = \ i$
$a_{i,j} \ = \ a_{i - 1, j - 1} + a_{i - 1, j}$
题目分析
时间复杂度:$O(n^2)$。
由于数据范围很小$1 \le N \le 30$,所有我们可以将所有的情况列出,直接查表即可。
先处理特殊情况$j \ ...
AtCoder Beginner Contest 253 A—E
本题解思路来自于 spoonjunxi
A
题目描述
给定三个数$a,b,c$,判断$b$是否在$[a,c]$之间,如果是输出Yes,否则输出No。
题目分析
直接判断即可。
$Code$
12345int a, b, c;cin >> a >> b >> c;if(b >= a && b <= c || b <= a && b >= c) puts("Yes");else puts("No");
$ \ $
$ \ $
B
题目描述
给定一个矩形,求出矩形中两个o之间的距离。
题目分析
曼哈顿距离公式。
$Code$
12345678910111213141516171819202122232425int n, m;int a[4];int idx;int main(){ cin >> n >> m; char c; for(int i = 1; i <= n; i ++ ) for(int j = 1 ...
不定积分-换元法-分部积分
换元法
换元法最重要的作用就是"打开局面"。在做积分题时,只需我们选择恰当的换元,就可以将复杂的积分变得非常简洁,尤其是在处理有根式的积分时,常常会使用换元法。
(1) 整体换元
被积函数中出现"$\sqrt{一次函数},\sqrt{\frac{一次函数}{一次函数}},\sqrt{e^{ax} + b},\frac{e^{ax} + b}{e^{ax} - b}$"可以直接将整个根号令为$t$,达到去掉根号的效果!
(当然,该方法虽然一定可行,但不一定是最快的方法,所以也需要具体问题具体分析)
例1
$\int\sqrt{\frac{x}{1 + x}}dx$
[解]:
$$令\sqrt{\frac{x}{1 + x}} = t \Rightarrow I = \int td\frac{1}{1 - t^2}$$
$$分部积分 \Rightarrow \frac{t}{1 - t^2} - \int\frac{1}{1 - t^2}dt$$
$$= \ \frac{t}{1 - t^2} + \int\frac{1}{t^2 - 1}dt$$ ...
不定积分--三角函数的积分
套路二 三角有理函数的积分
引言
以$R(u,v)$表示由$u,v$及常数经过有限次的四则运算得到的二次函数。而$R(\sin{x}, \cos{x})$则称为三角有理函数,比如$y = \frac{\sin{x}}{\cos^2{x}} \ \ \ y = \frac{1}{1 + \cos{x}} \ \ \ y = \frac{1}{(\sin{x} + \cos{x})^2}$这些都属于三角有理函数。
而一切的三角有理函数,都可以用过换元$\tan{\frac{x}{2}} = t(万能公式)$化为有理函数,而有理函数的积分,在套路一中已经解决过了,所以,“从理论上来说”,一切的三角有理函数的积分,其实也已经解决了。
但是!万能的方法,不一定是最好的方法。很多三角有理函数的积分,如果盲目的使用万能公式,$\tan{\frac{x}{2}} = t$,则计算量会特别大,所以我们需要具体问题具体分析,找到每一个题目的特殊解法!
(一) 万能公式换元法,令$\tan{\frac{x}{2}} = t$
对于$\int R(\sin{x}, \cos{x})dx$,只需令$\tan ...
不定积分--有理函数的积分
套路一 有理函数的积分 ($\int \frac{多项式}{多项式}dx)$
(一)有理函数积分的通项方法——裂项$ \ $+$ \ $待定系数
$ \ \ $有理函数从宏观上可分为真分式(分母为最高次项)和假分式(分子为最高次项),而任意一个假分式都可以通过多项式除法变成多项式与真分式之和。由于多项式的积分是简单的,所以解决有理函数函数的积分。本质上就变成了解决有理真分式的积分。而对于真分式的积分,我们有如下固定套路——
将该真分式的分母进行因式分解(一直分解到无法再分解为止)
然后进行裂项,裂项的原则如下——
①只需分母中含有$(x \ - \ a)^{k}$,则裂项后的式子中一定含有$\frac{A_1}{x \ - \ a} \ + \ \frac{A_2}{(x \ - \ a)^2} \ + \ … \ + \frac{A_k}{(x \ - \ a)^{k}}$
②只需要分母中含有$(x^2 \ + \ px \ + \ q)^k$(注:因为已经分解到"不能再分解"了,所以这里的$p^2 \ - 4q \ < \ 0$),则裂项后的式子 ...
常用库函数
常用库函数
声明
都存在#include <algorithm>这个库中
reverse翻转
翻转一个vector:
1reverse(a.begin(), a.end());
翻转一个数组,元素存放在下标1 ~ n:
1reverse(a + 1, a + n + 1);
unique去重
返回去重(只去掉相邻的相同元素)之后的为迭代器(或指针),仍然为前闭后开,即这个迭代器是去重之后末尾元素的下一个位置。该函数常用于离散化,利用迭代器(或指针)的减法,可计算出去重后的元素个数。
去重一个vector
123456// a: 5 5 4 1 2 2 3int m = unique(a.begin(), a.end()) - a.begin();cout << m << endl;// m = 5for(int t : a) cout << t << " ";// a: 5 4 1 2 3 2 3
去重一个数组,元素存放在下标1 ~ n:
1234567int a[8] = {10, 5, 5, ...
浅谈位运算
位运算
C++ 几种常用位运算简介
按位与 a & b (AND)
法则:两者相同位都为$1$,则结果中改为为$1$;否则结果中改位为$0$
1234例: 12 & 6 = 4 12: 1 1 0 0 6: 0 1 1 0 4: 0 1 0 0
按位或 a | b (OR)
法则:两者相同位中有一个为$1$,则结果中该位为$1$;否则结果中该位为$0$
1234例: 12 & 6 = 14 12: 1 1 0 0 6: 0 1 1 0 14: 1 1 1 0
按位异或 a ^ b (XOR)
法则:两者相同位的值若不同,则结果中该位为$1$;否则结果中该位为$0$
1234例: 12 & 6 = 10 12: 1 1 0 0 6: 0 1 1 0 4: 1 0 1 0
按位取反~a (NOT)
法则:该书中$0$的位置变为$1$,$1$的位置变为$0$
1234例: 12: 1 1 0 0 ~12: 0 0 1 1
按位左移 a << b
法则:将该数$a$左移$b$位,正数左移变为正数,负数左移变为负 ...
浅谈STL
vector
声明
12345#include <vector> // 头文件vector<int> a; // 相当于一个长度动态变化的int数组vector<int> b[233]; // 相当于第一维长233,第二位长度动态变化的int数组struct rec{…};vector<rec> c; // 自定义的结构体类型也可以保存在vector中
size/empty
size函数返回vector的实际长度(也就是包含的元素个数),empty函数返回一个bool类型,表明vector是否为空。二者的时间复杂度都是$O(1)$。
所有的STL容器都支持这两个方法,含义也相同,后续我们就不在重复给出了。
clear
clear函数把vector清空。
迭代器
迭代器就好像STL容器的"指针",可以用星号*操作符解除引用。
一个保存int的vector的迭代器声明方法为:
1vector<int>::iterator it;
vector的迭代器是"随机 ...