零基础学习C++
罚时大师月色
努力让更多小白和我一起共同进步
展开
-
C++ 数字与字符串的相互转换的几种方法
平时在刷题的时候总是会遇到数字与字符串怎么转换的问题,我们要是用一般的方法。字符串变成数字的常规套路秦九昭算法res=res*进制+每一位的数字(从高位向低位)string a;int res=0;for(int i=0;i<a.length();i++)res=res*10+a[i]-'0';数字变字符串。这是把数字19234变字符串的方法#include<iostream>#include<algorithm>using namespace st原创 2021-02-27 11:49:14 · 7751 阅读 · 5 评论 -
怎么去除重复元素 (vector类)
转载unique函数是一个去重函数,去除相邻中的重复元素(只留一个)。其中,最关键的是:并不是删除并不是把重复的元素删除,而是全部放倒数组的后面。因为,unique只是去除(相邻)的重复元素,因此,为了去除重复的元素,应该,首先对数组/Vector进行排序,这样保证重复元素在相邻的位置。unique函数,返回的是去重后的尾地址。因此对于一个内容为{2, 2, 5, 5, 6}的vector,执行unique函数以后,vector大小并没有改变,只不过顺序变成了{2, 5, 6, 2, 5},并且函原创 2021-02-27 11:16:12 · 4634 阅读 · 0 评论 -
AcWing 507. 积木大赛 (贪心+差分)
AcWing 507. 积木大赛原创 2021-02-25 08:23:55 · 160 阅读 · 1 评论 -
AcWing 211. 计算系数 快速幂的注意事项
AcWing 211. 计算系数给定一个多项式(ax+by)k,请求出多项式展开后xnym项的系数。输入格式共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开。输出格式输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。数据范围0≤n,m≤k≤1000,n+m=k,0≤a,b≤106输入样例:1 1 3 1 2 输出样例:3这道题真心来说很简单很简单,我们用dp+乘法逆元+快速幂解决了,这是一个送分的原创 2021-02-24 20:42:22 · 162 阅读 · 0 评论 -
AcWing 890. 能被整除的数
AcWing 890. 能被整除的数来自大佬的博文ttps://img-blog.csdnimg.cn/20210221211724332.png)这是一道典型的容斥问题,凡是个数为奇数的就系数为正,然后偶数为负y总的视频讲的很清楚首先我们想办法把n个数的的倍数求出来求出他们的个数,然后进行一个容斥运算,为什么要用二进制呢,因为1到2m-1是0位到m-1位的0,1的全排列。所以我们引用这部分的知识#include<iostream>using namespace std;c原创 2021-02-21 21:23:42 · 1111 阅读 · 4 评论 -
Acwing 889. 满足条件的01序列 (卡特兰数)
Acwing 889. 满足条件的01序列所以结果是y总说它叫卡特兰数只要求Cn2n/n+1就可so easy代码如下#include<iostream>using namespace std;typedef long long LL;const int mod=1e9+7;int quick_pow(int a,int k,int p){ int res=1; while(k) { if(k&1) res=(LL)r原创 2021-02-21 19:47:54 · 235 阅读 · 1 评论 -
AcWing 793. 高精度乘法
Acwing 793.高精度乘法这道题的思路还是很简单的,建议多看一下y总的视频,然后y总写的代码真的很简洁。y总视频#include<iostream>#include<vector>using namespace std;vector<int> add(string A,int b){ vector<int> a; for(int i=A.length()-1;i>=0;i--) a.push_back(原创 2021-02-21 15:43:06 · 88 阅读 · 1 评论 -
AcWing 887. 求组合数 III(卢卡斯定理)
求组合数 III这很明显也是一个数论题,你要是不知道结论的话,很难做出来这道题的,首先我们引入一个结论。不过有些细节还是要靠代码实现,从这篇文章转载过来的一个证明图。不过证明过程很复杂,我们只需要记住一个式子就可以了最细节的还是代码实现过程。代码如下#include<iostream>using namespace std;typedef long long LL;int p;int quick_pow(int a,int k,int p){ in原创 2021-02-21 15:36:44 · 196 阅读 · 0 评论 -
AcWing 886. 求组合数 II(乘法逆元)
求组合数这道题和上一篇很像,但是这道题的数据范围也变大了,那我们该怎么求呢,我们要求i(1-N)的 i! 和 i!-1然后根据Cba=a!/(b!*(a-b)!)这样求就会可以很方便的求组合数了,时间复杂度是N(log2N)因为求快速幂的时间复杂度是log2N级别的,输出结果是o(1)的然后我们怎么求 i!,这个很简单,类似于递归的方式调用前一个数组,但是难点是怎么求 i!-1呢,我们还是要用到一个定理。b是底数,m是模,如果b,m互质b-1等于bm-2%m这是类似于费马小定理的递推。然后思原创 2021-02-21 14:21:50 · 253 阅读 · 0 评论 -
AcWing 884. 高斯消元解异或线性方程组
题目链接这道题和高斯消元其实很像,但是异或消元要比加减法消元容易一点,因为首先系数只有0或1,然后很容易异或,因为1^1=0,1^0=1,0^1=1,0^0=0.上一次高斯消元的博文然后主要思路还是形成“倒”金字塔,然后从后往前求解。#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int N=110;int a[N][N];in原创 2021-02-21 10:16:02 · 131 阅读 · 0 评论 -
AcWing 883. 高斯消元解线性方程组
Acwing题目入口题目:输入一个包含n个方程n个未知数的线性方程组。方程组中的系数为实数。求解这个方程组。下图为一个包含m个方程n个未知数的线性方程组示例:输入格式第一行包含整数n。接下来n行,每行包含n+1个实数,表示一个方程的n个系数以及等号右侧的常数。输出格式如果给定线性方程组存在唯一解,则输出共n行,其中第i行输出第i个未知数的解,结果保留两位小数。如果给定线性方程组存在无数解,则输出“Infinite group solutions”。如果给定线性方程组无解,则输出“N原创 2021-02-21 09:08:04 · 243 阅读 · 0 评论 -
AcWing 204. 表达整数的奇怪方式
这道题我第一眼居然想着用二分法做,结果,还是不满足二分条件。WA代码如下#include<iostream>using namespace std;const int N=30;int a[N],m[N];int n;bool check(int x){ for(int i=1;i<=n;i++) { if(x%a[i]!=m[i]) return false; } return true;}.原创 2021-02-20 21:10:39 · 2037 阅读 · 6 评论 -
AcWing 878. 线性同余方程
仅看这道题的话,我觉得还是不是很容易看出思路来的,y总把这个式子拆分,拆分成了aixi-yim=bI;这个再进行一个转换。aixI+yim=bi这与扩展欧几里得算法就很像了。如果有解的话,那么bi一定是a,m的倍数。扩展欧几里得也是这么说的,然后思路就来了。会扩展欧几里得的话这道题就很简单啦最后的x应该等于 如果有解,b/gcd(a,m)*x1%m;#include<iostream>using namespace std;int exgcd(int a,int b.原创 2021-02-20 19:22:20 · 135 阅读 · 1 评论 -
AcWing 877. 扩展欧几里得算法
这是一道数论题,我们应该怎么做呢,我们还是要推一个结论带′'′的都是由辗转相除法得到的x1,y1。然后原函数x,y分别等于x=y1,y=x1-a/b*y1;这一点很关键,我们要先求那个x1,y1然后再改变x,y.y总代码尽管很强,但是不是很好理解。我写了一个比较好理解的扩展欧几里得算法代码#include<iostream>using namespace std;int exgcd(int a,int b,int &x,int &y){ if(!.原创 2021-02-20 18:13:50 · 185 阅读 · 0 评论 -
AcWing 876. 快速幂求逆元
https://www.acwing.com/problem/content/878/输入样例:34 38 56 3输出样例:12impossible刚开始看题意没看懂啥意思,我第一次以为求aaap-2,但是看测试样例不太对,然后我看了y总的视频,果然是干货满满的y总没让我失望。https://www.acwing.com/video/301/还用到了费马小定理 ap-1=1%p;p为质数。y总说求的是aaap-2%modmodmod我一下子明白了测试样例的理由,其实这道原创 2021-02-20 11:50:41 · 263 阅读 · 0 评论 -
AcWing 874. 筛法求欧拉函数
https://www.acwing.com/problem/content/description/876/这道题并不简单,你要会用欧拉筛去筛欧拉数。说说思路。首先和欧拉筛质数一样,先把质数筛出来,质数的欧拉数为本身减1,因为质数与前面的数都互质。然后用质数去更新下一个数,筛除合数的同时,去更新合数的欧拉数,其中有几个特殊的地方。#include<iostream>using namespace std;const int N=1e6+10;int prime[N],c原创 2021-02-20 11:11:13 · 156 阅读 · 1 评论 -
AcWing 871. 约数之和
https://www.acwing.com/problem/content/description/873/这道题我觉得非常需要写一篇博文了,这道题尽管看起来像一个简简单单的求约数之和问题,其实有一个式子我们确实不知道,数论确实包含了我们不知道的定理。比如说p是质因数,a是质因数的个数,把他写成了一个等比数列,可能这样是正确的吧。总之,证明过程我可能不会,这个公式,我们需要记住他。然后理解了公式,代码其实真的不难,除了模运算有点东西,其他的都很简单。#include<iostrea原创 2021-02-19 21:36:47 · 242 阅读 · 1 评论 -
AcWing 870. 约数个数
这道题不难,但是值得我去写的原因在于,一个数约数的个数等于其质因数的个数+1的总乘积p1表示质因数,a表示质因数的个数,最后,约数的个数等于代码也很简单,用到了hash函数#include<iostream>#include<map>#include<algorithm>using namespace std;const int mod=1e9+7;int n;int main(void){ scanf("%d",&n);.原创 2021-02-19 21:17:10 · 124 阅读 · 2 评论 -
比较好的归并排序代码--y总版
#include <iostream>using namespace std;const int N = 1e5 + 10;int a[N], tmp[N];void merge_sort(int q[], int l, int r){ if (l >= r) return; int mid = l + r >> 1; merge_sort(q, l, mid), merge_sort(q, mid + 1, r); in转载 2021-02-18 21:11:07 · 248 阅读 · 0 评论 -
AcWing 866. 试除法判定质数 的一些细节
这道题真的非常非常简单,然后我也是很快的写完了代码,但是,遇到了一些小意外。这是我的第一个版本,但是不知道为什么居然会超时WA了,这是我没有想到的。#include<iostream>using namespace std;int n;bool prime(int x){ if(x<2) return false; for(int i=2;i*i<=x;i++) if(x%i==0) return false; retur.原创 2021-02-17 22:20:30 · 112 阅读 · 1 评论 -
AcWing 604. 圆的面积
#include<iostream>using namespace std;const double PI=3.14159;int main(void){ double r; cin>>r; printf("A=%.4lf",PI*r*r);}原创 2021-02-04 08:20:58 · 136 阅读 · 0 评论 -
AcWing 608. 差
#include<iostream>using namespace std;int main(void){ int a,b,c,d; cin>>a>>b>>c>>d; cout<<"DIFERENCA = "<<a*b-c*d;}原创 2021-02-04 08:17:09 · 167 阅读 · 0 评论 -
AcWing 1. A + B
#include<iostream>using namespace std;int main(void){ int a,b; cin>>a>>b; cout<<a+b;}原创 2021-02-04 08:13:31 · 960 阅读 · 0 评论