J组
1.指针
- 指针的概念:内存单元的位置(编号)叫作“地址”,可以通过取地址操作符“&”获得一个变量 a 的起始地址(首个存储单元的地址):&a。
指针也是一个变量。和普通变量不同的是,指针变量里存储的数据是一个内存地址,就好像一个指示器,指引着你去该内存地址开始的一块内存区域存取数据。 - 指针变量的定义格式为:
数据类型 *指针变量;
可以通过赋值语句给指针变量赋值,例如“p = &a;”表示把变量 a 的内存地址赋值给 p,如图所示。
指针变量初始化:
int *p = NULL; - 指针的动态性,还体现在可以根据需要,通过函数 new()随时申请
- 动态申请内存:
1.malloc()
void* malloc(unsigned size);在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址。2.calloc()
void* calloc(size_t numelements, size_t sizeofelement);与malloc相似,参数sizeofelement为申请地址的单位元素长度,numelements为元素个数,即在内存中申请numelementssizeofelement字节大小的连续地址空间。
3.realloc()
void realloc(void* ptr, unsigned newsize);给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度。
2.链表
- 链表中每个结点的数据结构定义如下:
struct node{
int num;
node *next;
};
2.S组
- tarjan算法
void tarjan(int x,int eid){
dfn[x]=low[x]=++num;
for(int i=head[x];i;i=nxt[i]){
if(i==eid^1) continue;
int y=ver[i];
if(dfn[y]==0){//没访问过,树枝边
tarjan(y,i);
low[x]=min(low[x],low[y]);
if(low[y]>dfn[x]) cut[i]=cut[i^1]=true;
}
else low[x]=min(low[x],dfn[y]);
}
}
3.J组自由题目
a题代码:
#include<bits/stdc++.h>
using namespace std;
long long n;
int main()
{
cin>>n;
if(n<=33) cout<<"1900"<<endl;
else if((n%33) && (n%33+33)<=49) cout<<(n/33-1)*1900+3300<<endl;
else cout<<(n+32)/33*1900<<endl;
return 0;
}
//懒得打了,这一天就这么愉快的结束了
–2024-08-12 20:13:16 星期一