1
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int q[N]; //queue<DataType> q;
int head=0;
int tail=0;
void push(int x){//从队尾加入 q.push(data);
q[tail]=x;
tail++;
}
int size(){//获取队列元素个数 q.size();
return tail-head;
}
void pop(){//将队首向后推 q.pop();
head++;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
string s;
cin>>s;
if (s=="push"){
int t;
cin>>t;
q.push(t);
}else {
if(q.size()){
q.pop();
}
}
}
while(q.size()){
cout<<q.top()<<" ";
q.pop();
}
}
2
#include<bits/stdc++.h>
using namespace std;
const int N=10;
struck node{
int data,parent;
vector<int> child;
};
node tree[N];
int main(){
}
//树结点的度:一个结点所拥有的子树的数量
//叶子结点:度为0的结点
//一棵树的度:所有结点中度的最大值
//树的高度或深度:树中结点的最大层次
//n个结点的树,有且仅有n-1条边
//有数据需要存储
/父亲表示法(结构体存储数据和父亲结点)
父亲结点是唯一的,使用一个数据可以存储
孩子表示法( 结构体存储数据和孩子结点)
孩子结点不是唯一的,需要使用动态数组 vector
/
//二叉树
/ 1 第i层上最多有2^(i-1)个结点(i>=1)
2 深度为k的二叉树至多有2^k-1个结点
3 n0=n2+1 n0 (度为0的叶子结点) n2 (度为2的结点)
孩子结点 + 父亲结点 = 全部结点
n0 + n1 + n2 = n (度为0结点个数 + 度为1结点个数 + 度为2结点个数 = 全部结点个数)
n11 + n2*2 + 1 = n 孩子结点 + 不可以被称为孩子结点的结点数 = 全部结点个数
(所有可以被称为孩子结点的结点数 + 1个根结点 = 全部结点个数)
/
//存储
/DataType tree[N];
tree[i]
tree[i2]
tree[i2+1]
*/
//遍历
/*前序:根左右
中序:左根右
后序:左右根
*/
// 图
/1. 简单图:不存在 自环 或 重边
复杂图: 存在 自环 或 重边
2. 度:无向图-->路径数量
有向图-->入度 && 出度
3. 完全图:任意两条边都能直通
无向完全图:n(n-1)/2 条边
有向完全图:n*(n-1) 条边
3
#include<bits/stdc++.h>
using namespace std;
#define test //定义了宏test
int main(){
#ifdef test //如果定义了宏test 则执行以下内容
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
#endif test //结果test宏的条件语句
/逻辑代码/
long long a,b;
cin>>a>>b;
cout<<a+b<<endl;
#ifdef test//如果定义了宏test 则执行以下内容
fclose(stdin);
fclose(stdout);
#endif test //结果test宏的条件语句
return 0;
}
4
//结束1(程序) 2(函数) 3(循环)
1.exit() 2.return 3.break
// L~R +C
d[L]+=C;
d[R+1]-=C;
//二分
mid=(l+r)/2; //=l+(r-l)/2;
int BinarySearch(int a[],int l,int r,int x){
while(l<=r){
int mid=(l+r)/2;
if(x==a[mid]) return mid;
else if (a[mid]>x) r=mid-1;
else if (a[mid]<x) l=mid+1;
}
return -1;
}
lower_bound 使用二分查找算法来寻找序列中第一个大于或等于指定值的元素。//返回地址
//取地址 a=&a[0]; 用首个地址减去由lower_bound得到的地址
lower_bound(a+1,a+n+1,x)-a ;
upper_bound 使用二分查找算法来寻找序列中第一个大于指定值的元素。//返回地址
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[20];
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
cout<<lower_bound(a+1,a+n+1,4)-a<<endl;
cout<<upper_bound(a+1,a+n+1,4)-a<<endl;
return 0;
}
//二分上下界
x上界-x下界=x的个数
5
序号 简写 英文全称 中文含义 示例说明
1 OJ Online Judge 在线判题系统 像 acogo,luogu 等网站,用户提交代码后,系统会自动判断代码的正确性,这个过程就是由在线判题系统完成的。
2 AC Accepted 通过 当提交的代码能够正确通过所有测试用例时,就会显示 AC。例如,在一个求两个数之和的问题中,代码正确计算出所有给定输入的和,就会得到 AC 结果。
3 WA Wrong Answer 答案错误 代码逻辑存在问题,导致输出结果与正确答案不符。比如在计算阶乘的题目中,代码因使用了错误的运算符,导致结果错误,就会得到 WA。
4 TLE Time Limit Exceed 超时 代码运行时间超过了系统规定的时间限制。例如,使用两层循环在一个大规模数组中查找特定元素,数据量较大时就会因运行时间过长而超时。
5 OLE Output Limit Exceed 超过输出限制 代码输出的数据量超过了系统允许的范围。比如在无限循环中不断输出数据,就会导致 OLE。
6 MLE Memory Limit Exceed 超内存 代码运行时使用的内存超过了系统设定的内存上限。例如,创建了过大的数组或者数据结构,导致内存占用过多。
7 RE Runtime Error 运行时错误 代码在运行过程中出现了错误,如除以零、访问非法内存地址等。比如在程序中试图除以一个零值变量,就会出现 RE。
8 PE Presentation Error 格式错误 输出结果本身正确,但输出格式不符合要求。例如,题目要求输出结果保留两位小数,而代码输出的结果没有保留两位小数。
9 CE Compile Error 编译错误 代码在编译阶段就出现了错误,如语法错误、拼写错误等。比如在 C++ 中忘记给函数添加返回值类型等,就会导致 CE。
6
1 typedef ——将...简写为...
2 vector: 动态数组 长度不固定
vector<int> v;
//char 、data...
vector<int> v[105]; 定义105个整形动态数组v[0]~v[104]
v.push_back(n); 插入到末尾
下标— 0~v.size()-1
3 等比数列
(1 2 4 8 16 32 ……)
公比 为q: 2
等比数列首相ai: 1
1 2 4 ......
aiq^0 aiq^1 aiq^2 ......
s1=aiq0+ai*q1+aiq^2 ...... +aiq^(k-1)
qsi=aiq1+ai*q2 ...... +ai*q^kb
7
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int stk[N+10];
int top=0;
void push(int x){
++top;//准备空间
stk[top]=x;//存储元素
}
void pop(){//出栈,栈顶向下压
top--;
}
bool empty(){
return top==0;
}
int size(){
return top;
}
int main(){
}
//
DataType stk[N];
int top=0; stack<DataType> stk;
stk[++top]=data; stk.push(data);
top--; stk.pop();
top==0; stk.empty();
top stk.size();
stk[top]; stk.top();
for(int i=1;i<=top;i++){
cout<<stk[i]<<" ";
}
8
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int q[N]; //queue<DataType> q;
int head=0;
int tail=0;
void push(int x){//从队尾加入 q.push(data);
q[tail]=x;
tail++;
}
int front(){//获取队首元素 q.front();
return q[head];
}
int back(){//获取队尾元素 q.back();
return q[tail-1];
}
int size(){//获取队列元素个数 q.size();
return tail-head;
}
void pop(){//将队首向后推 q.pop();
head++;
}
bool empty(){//判断是否为空 q.empty();
return head==tail;
}
int main(){
}
9