C++
饮闲
写作是门孤独的手艺,意义却在于分享
展开
-
对vector容器中的基本元素及结构元素,使用sort进行排序; 对set等有序结构使用cmp重载排序函数
1.对于正常的数组,使用如下方法进行排序:sort(nums, num + n);2.而对于vector数组num,需要使用:sort(nums.begin(), nums.end());进行排序。3.对自定义结构num使用cmp进行排序:bool cmp(const num &a, const num &b){ return a.val < b.val;}// 调用方式sort(nums, nums + n, cmp);4.同样,这种比较大小的运算符的原创 2021-08-17 09:21:36 · 526 阅读 · 0 评论 -
阿里巴巴校园招聘——灵犀互娱、游戏研发工程师、一面面经
今天下午,参加了阿里巴巴、灵犀互娱、游戏研发工程师的一面,感觉提问的问题不是很难,但是可能基础不是很好,并且游戏这方面接触的也比较少,所以面试的表现不是很好。面试集中在以下几个方面:1. C++基础知识构造函数是否可以作为虚函数?答案:构造函数是不可以作为虚函数的。为什么呢?因为构造函数是,需要确定对象的类型,而虚函数是在运行期间确定类型的,因此编译器无法知道是要构造基类对象,还是构造派生类的对象,因此构造函数不可以是虚函数。虚函数的执行依赖于虚函数表,而虚函数表是在构造函数中进行初始化工作原创 2021-08-11 22:30:22 · 2312 阅读 · 1 评论 -
C++函数模板学习总结
函数模板是什么?通用函数描述,使用泛型来定义函数,其中的泛型可以用具体的类型来替换,使用函数模板的编程有时候也叫做泛型编程。知识总结在标准的C++98添加关键字typename之前,C++使用关键字class来创建函数模板。// 函数声明,声明时也要用模板的方式template <typename T>void Swap(T &a, T &b);注意函数模板不能缩短可执行程序,最终的代码不包含任何模板,而只包含了为程序生成的实际函数。使用函数模板的好处是,使得生成原创 2021-08-07 12:24:13 · 377 阅读 · 0 评论 -
背包问题你们见过吧。但是超大背包问题怎么搞呢?
题目n个物品,重量w[i],对应的价值为v[i],从这些物品中挑选重量不超过W的物品,求价值总和最高的方案。1 <= n <= 401 <= w,v <= 10^151 <= W <= 10^15解析背包问题用动态规划求解,复杂度O(nW),但是这里W的范围太大了,搞不了。不过这里面的n范围比较小,可以考虑从n下手。n的大小为40,2^40超出限制,考虑利用折半查询的方式,先折半前一部分的所有可能性,然后排序,剪枝掉一定不会选择的组合,即重量大,价值小原创 2021-08-05 12:00:38 · 786 阅读 · 0 评论 -
折半枚举(双向搜索) —— 4 Values whose Sum is 0 POJ - 2785 题解
题目链接https://vjudge.net/problem/POJ-2785题目简述有ABCD四个数组,从每个数组中选取出一个元素,求和为0的所有组合总数。题目解析每个都枚举肯定是不行的,复杂度O(n^4).可以考虑独立出一个来,然后求A+B+C的和,然后对D排序,二分搜索D的值,复杂度O(n^3 * log(n)),不太够,再度优化可以看成 a + b = - c - d先求C+D的和,看做一个新的数组cd,对cd排序然后枚举A+B,再二分搜索cd的值,时间复杂度O(n^2原创 2021-08-04 17:07:25 · 209 阅读 · 0 评论 -
阿里巴巴校园招聘 —— 灵犀游戏开发测试岗笔试题目总结(菜鸡版解析)涉及知识点——十字链表、线程与堆栈、FTP、Telnet、红黑树、哈夫曼树、平衡二叉树、乐观锁、悲观锁、HTTP、NIM游戏
内容感觉内容无非是那几个:数据结构与算法 + 计算机网络 + 操作系统 + C++基础语法知识简单的送分题我就不说了,我说几个还有点迷惑性的点来整理一下:1. 十字链表在Linux内核中应用十分广泛的一种数据结构——十字链表,可以用来表示稀疏矩阵。2. 线程与堆、栈的关系栈——线程可以独立拥有,保存其运行状态和局部自动变量。每个线程的栈相互独立。堆,一个进程中的所有线程是共享堆的内存空间。3. FTP两种连接方式:命令连接(类似于建立连接的过程) 21端口数据连接 20端口数原创 2021-08-03 22:22:13 · 801 阅读 · 2 评论 -
集合的整数表示——二进制表示法
使用情况只有当集合中的元素比较少的时候,才能用这种方法来表示。原理f(S) = sum(2^i),其中,i为属于集合的元素的所有下标。用法空集 —— 0只含第i个元素的集合 —— 1<<i含有从0到n-1这n个元素的集合 —— (1<<n) - 1判断第i个元素是否属于集合S —— if (S >> i & 1)向集合中加入第i个元素 —— S | 1 << i从集合中去除第i个元素 —— S & ~(1 <<原创 2021-08-03 06:00:11 · 571 阅读 · 0 评论 -
Fliptile POJ - 3279 题解优美的暴力
题目链接https://vjudge.net/problem/POJ-3279拿到这道题想了很久,都没找到什么好的做饭,一看题解,好家伙,直接暴力是没想到的,一看数据最多才15行15列,之间暴力就OK了。首先,暴力第一行的所有可能性,2的15次方,大概32768种可能性。只要第一行确定下来了,之后的情况都可以之间根据上一行来锁定出下一行,然后确定出整个矩阵的最优解。注意,同样踩踏次数的可能性下,要选择字典序最小的那种踩踏情况,所以要从最小的数0开始,一直确定到最大的数2的15次方。AC代码原创 2021-08-02 16:58:10 · 292 阅读 · 0 评论 -
Face The Right Way POJ - 3276 题解
题目链接https://vjudge.net/problem/POJ-3276开关问题K为反转块的大小,M为反转的次数(要求在最小的反转次数内,选择最小的反转块)我们,首先从小到大遍历所有的单位块K,这样能保证在选择最小的反转次数M的同时,只会保留最小的块数K。对于每一个可能的K值,如果能满足条件,则turn函数返回需要反转的次数,如果反转的次数比当前值要小,则更新最小的M,因为K是保证在最小M前提下的K,所以也要同时更新K值。在turn函数的每一次处理中,以块为单位的思想进行推进,记原创 2021-08-02 15:01:57 · 261 阅读 · 0 评论 -
Jessica‘s Reading Problem POJ - 3320 题解 双指针,set,map
题目链接https://vjudge.net/problem/POJ-3320代码#include <iostream>#include <set>#include <map>using namespace std;int P;const int MAX_P = 1000000;int a[MAX_P];void solve(){ set<int> all; for (int i = 0; i < P; +原创 2021-08-02 12:51:26 · 216 阅读 · 0 评论 -
POJ 3061 Subsequence 题解 法一: 二分 + 遍历 法二:双指针
代码#include <iostream>#include <algorithm>using namespace std;int N, S;const int MAX_N = 100000;int A[MAX_N];int sum[MAX_N];void solve(){ sum[0] = A[0]; for (int i = 1; i < N; ++i) { sum[i] = sum[i - 1] + A[i]; } int res =原创 2021-07-30 17:29:24 · 223 阅读 · 0 评论 -
Aggressive cows POJ - 2456 题解
题目链接点击这里代码#include <iostream>#include <algorithm>using namespace std;int N, M;const int MAX_N = 100000;int X[MAX_N];bool try_place(int mid){ int pre = 0; int cnt = 1; for (int i = 1; i < N; ++i) { if (X[i] - X[pre] >= m原创 2021-07-30 15:34:46 · 230 阅读 · 0 评论 -
Cable master POJ - 1064 题解
题目链接https://vjudge.net/problem/POJ-1064当然我是在Virtual Judge上面写的,可以直接去POJ去提交。这个题目感觉并不是很困难的样子,主要就是一个二分的思想,之前写的时候,主要是结尾判断的时候,没有向下取整,直接四舍五入的,导致一直提交失败,甚至写了不只一个版本的代码。下面,我随便给出两个版本的结果,都能过。#include <iostream>#include <cstdio>#include <cmath>原创 2021-07-30 10:03:42 · 432 阅读 · 1 评论 -
Boost学习笔记(一)——Boost使用基础、内存管理
一、Boost使用基础Boost库的大部分组件(90%左右),不需要进行编译,直接包含头文件即可使用。#include <boost/logic/tribool.hpp>using namespace std;Boost网站www.boost.orgC++标准库的一个实现——STLport配合boost库工作可移植性高,几乎可以配合市面上所有的操作系统合编译器来使用如果想要深入了解,推荐大家看一下《Boost完全开发手册这本书》,虽然是十年前的老书,但有诸多可以复用的经验,读原创 2021-07-19 12:27:54 · 2502 阅读 · 2 评论 -
POJ 2029 二维树状数组
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int max_N=500+1;int bit[max_N][max_N];int n,m;int lowbit(int x){ return x&(-x);}void update(int x,int y,int val){ for(int i=x;i<原创 2020-10-28 19:13:52 · 215 阅读 · 0 评论 -
2020ICPC·小米 网络选拔赛第一场 J题
题目链接链接:https://ac.nowcoder.com/acm/contest/7501/J来源:牛客网题目:Matrix Subtraction分析:中等难度题,可以用差分来解决、也可以直接套二维树状数组的模板,也可以利用dp来解决注意,从头减到尾,注意矩形越界时的处理即可。AC代码:#include <cstdio>#include <iostream>using namespace std;const int N = 1001;inline原创 2020-10-28 15:13:57 · 307 阅读 · 0 评论 -
扩散-并查集-二分
n1#include <iostream>#include <cstdio>#include <cmath>using namespace std;/*432 1921 1444 248 13*/int n;struct node{ int x,y;}a[55];int d[55][55];int fa[55];int juli(int i,int j){ return abs(a[i].x-a[j].x)原创 2020-09-02 19:24:42 · 272 阅读 · 0 评论 -
kmp的实现——简单算法
#include <iostream>#include <cstdio>#include <iostream>#include <cstring>#include <string>using namespace std;const int inf = 0x3f3f3f3f;const int maxn = 2005;#define eps 1e-8#define INIT(x) memset(x,0,sizeof(x))ty原创 2020-09-02 15:08:01 · 232 阅读 · 0 评论 -
可以实现分组的简单小程序
嗯,名单是我们班同学的名单,我注释掉了,你们自己添加,有C++基础应该不难的。#include <iostream>#include <ctime>#include <cstdlib>#include <string>#include <algorithm>using namespace std;const int N = 20000;string b[]={"\0",// 分组名单,如"张三","lisi",等等};原创 2020-09-02 15:03:43 · 4002 阅读 · 0 评论 -
邻接矩阵的简易实现 C语言
主函数#include <stdio.h>#include <stdlib.h>#include "AdjMatrix.h"//!int main(){ /* if (freopen("D:\\y.txt","r",stdin)==NULL) printf("打开文件失败!\n"); */ if(freopen("data.txt","r",stdin)==NULL) { printf("File open原创 2020-09-02 14:58:48 · 587 阅读 · 0 评论 -
CCF 2018年12月第二题 小明放学
#include <iostream>using namespace std;int main(){ int light[3]; // 输入顺序 red yellow green // 红绿灯顺序 0 yellow 1 red 2 green cin>>light[1]>>light[0]>>light[2]; int n; cin>>n; int i,k,t; // sum为一个循环红绿灯的时长 // ans为自出原创 2020-09-01 19:48:57 · 228 阅读 · 0 评论 -
CCF 2018年12月第一题
#include <iostream>using namespace std;int main(){ int r,y,g; cin>>r>>y>>g; int n; cin>>n; int i,k,t; int sum=0; for(i=0;i<n;i++){ cin>>k>>t; if(k==0){ sum+=t; } if(k==1){ sum=sum+t;原创 2020-09-01 19:47:57 · 238 阅读 · 0 评论 -
大学物理实验——计算平均自由程 C++
#include <iostream>#include <cmath>using namespace std;int main(){ double k=1.38e-23; double T=300,P1=1.333e-3,P2=1.333e-11; double n1=P1/(k*T),n2=P2/(k*T); cout<<n1<<endl<<n2<<endl; double pi原创 2020-09-01 19:34:05 · 1108 阅读 · 0 评论 -
最长公共子序列的简单实现 模板
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 5 using namespace std; 6 7 const int max_n = 1000+10; 8 9 int n,m;10 char s[max_n],t[max_n];11 in...原创 2020-02-03 20:58:00 · 211 阅读 · 0 评论 -
完全背包问题的简单实现
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 5 using namespace std; 6 7 const int max_n = 100+2; 8 const int max_W = 10000+2; 9 10 int n,W;11 i...原创 2020-02-04 10:21:00 · 239 阅读 · 0 评论 -
B - Draw! 简单题
You still have partial information about the score during the historic football match. You are given a set of pairs(ai,bi)(ai,bi), indicating that at some point during the match the score was "a...原创 2020-01-29 09:09:00 · 258 阅读 · 0 评论 -
STL-vector的简单利用
1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 5 using namespace std; 6 7 // 注意:vector在尾部添加或移动元素非常快,在中间操作非常耗时,因为它需要移动元素 8 9 10 int main(...原创 2020-01-28 17:35:00 · 189 阅读 · 0 评论 -
STL-string的基本用法介绍
1 #include <string> 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 8 int to_lower(int c) 9 { 10 if ...原创 2020-01-28 11:53:00 · 225 阅读 · 0 评论 -
STL-stack栈的简单应用
1 #include <iostream> 2 #include <stack> 3 4 using namespace std; 5 6 int main() 7 { 8 // 栈比较简单 9 // push,pop,size,top10 // 基本操作很少,很容易实现和使用11 // 一般可以写数组模...原创 2020-01-28 20:53:00 · 259 阅读 · 0 评论 -
STL-queue 队列的简单实现
1 #include <iostream> 2 #include <queue> 3 4 using namespace std; 5 6 int main() 7 { 8 // queue也很简单 9 // push,pop,size,front10 queue<int> q1;11 q1....原创 2020-01-28 20:59:00 · 281 阅读 · 0 评论 -
STL-list 链表的简单实现
1 #include <iostream> 2 #include <list> 3 4 using namespace std; 5 6 int main() 7 { 8 // list可以在头部和尾部插入和删除元素 9 // 不能随机访问元素,迭代器只能++,不能一次性跳转10 list<int> L...原创 2020-01-28 21:11:00 · 192 阅读 · 0 评论 -
并查集的简单实现 代码模板
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 const int max_n = 1000; 7 8 int par[max_n]; 9 int ranks[max_n];10 11 void init(int n)12 {13 ...原创 2020-02-08 20:57:00 · 188 阅读 · 0 评论 -
简简单单的二分图的判定
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <vector> 5 6 using namespace std; 7 8 const int max_N = 1000+2; 9 10 // 图的邻接表11 vec...原创 2020-02-14 22:26:00 · 261 阅读 · 0 评论 -
大学物理实验-分压电路数据处理 C++
#include <iostream>#include <cstdio>#include <iomanip>using namespace std;double K[6]={0.25,0.5,1,2,5,10};double data[6][11];int main(){ for(int i=0;i<6;++i) { for(int j=0;j<11;++j) { ci原创 2020-08-29 16:52:29 · 1133 阅读 · 0 评论 -
C++ tempate练习
#include using namespace std;templateclass Compare{public:Compare(type a,type b):a(a),b(b) {}type max_is();//{// return a>b?a:b;//}type min_is();private:int a;int b;};template type Compare::min_is(){return a<b?a:b;}template t原创 2020-08-29 16:29:05 · 364 阅读 · 0 评论 -
简简单单的汉诺问题
#include <iostream>using namespace std;int main(){ void han_move(int n,char a,char b,char c); int n=1; char a='A',b='B',c='C'; han_move(n,a,b,c); return 0;}void han_move(int n,char a,char b,char c){ if(n==1){原创 2020-08-29 16:26:03 · 220 阅读 · 0 评论 -
重载练习之时钟
不能重载成为类的成员函数,因为左操作数是流对象,是非本类对象。大部分情况下,都是通过友元函数(非成员函数,无this指针)来实现。friend Complex operator +(const Complex &a,const Complex &b);引用,避免拷贝构造函数的调用。对引用加上限制,const;operator << (operator << (cout,a),b);#include <iostream>using names原创 2020-08-29 16:24:15 · 332 阅读 · 0 评论 -
简简单单的快速排序
#include <iostream>using namespace std;void Qsort(int a[],int low,int high){ if(low>high){ return; } int key=a[low]; int first=low,last=high; while(first<last) { while(first<last && a[last原创 2020-08-29 16:22:54 · 225 阅读 · 0 评论 -
用链表模拟求解一元多项式
链表的应用,输入多项式,并求解,简易测试数据,减下方注释的文件。#include <stdlib.h>typedef struct Polynode{ int coef; int exp; struct Polynode* next;}Polynode,*Polylist;Polylist PolyCreate(){ Polynode *head,*rear,*s; int c,e; head=(Polynode *)malloc(原创 2020-08-27 21:19:21 · 288 阅读 · 1 评论 -
链表之Reverselist
#include <stdlib.h>void ReverseList(LinkList L){ // 使p指向链表的头节点,若为空链表,p=NULL; p=L->next; // 将链表的下一个节点置为空,在空链表时,重复赋值,无错,在非空链表时,看如下步骤,在新的步骤中,可将第一个节点的后一节点设为空指针 // 实现了对头节点的后继节点的设置 L->next=NULL; while(p!=NULL) {原创 2020-08-27 21:17:06 · 823 阅读 · 0 评论