首页 > 其他分享 >Modelcode

Modelcode

时间:2023-04-07 20:11:53浏览次数:42  
标签:int ll bt void heap now Modelcode

个人用的 模板 不喜勿喷

1.这个是自己非用STL写的板子 优化极差 还是建议STL

void sortfast(int l,int r){
    int i,j,mid,p;
    i=l;j=r;
    mid=a[(l+r)/2];
    do{
        while(a[i]<mid) i++;
        while(a[j]>mid) j--;
        if(i<=j)
        {
            p=a[i];a[i]=a[j];a[j]=p;
        }
      }
      while(i<=j);
      if(l>j) sortfast(l,j);
      if(i<r) sortfast(i,r);
    }
    

2.一个并没用什么卵用的冒泡排序 适用于写一写红题

void maopao(int m,int n){
    for(int i=n;i>0;i--){
        for(int j=1;j<i;j++){
            if(a[j]>=a[j+1])
            sqrt(a[j],a[j+1]);
        }
    }
}

3.这个是考试必备的freopen (据说我们这届机房有个人退役前次次炸freopen)

//freopen
freopen("std.in","r",stdin);
freopen("std.out","w",stdout);
/*中间开始写代码*/
fclose(stdin);fclose(stdout);

4.这是一个不怎么建议用的指针建树

//建树
typedef struct node;
typedef node*tree;
struct node{
    char data;
    tree lchild,rchild;
}; tree bt;
void build(tree &bt){
    int x=0;
    while(s[x]!='!'){
    bt=new node;
    bt->data=s[x];//s[x]是在main函数里输入的
    build(bt->lchild);
    build(bt->rchild);
    x++; 
    }
}

5.个人建议用链式前向星


//链式前向星
int tot,head[N>>1];
struct point{
	int n;
	int v;
	ll w;
	int nex;
}p[N];
void add(int a,int b){
	p[++tot]=(point){a,b,head[a]};
	head[a]=tot;
}

6.这个堆我没咋用 用stl的大根堆

//堆
void put(int d)
{
    int now,next;
    heap[++heap_size]=d
    now=heap_size;
    while(now>1)
    {
        next=now>>1;//>>相当于/2
        if(heap[now]>=heap[next])return;//符合条件,返回
        swap(heap[now],heap[next]);
    }
}

7.据说是一个优化cin的方法 但是有个bug 有人在csp的考场上试过

//时间差
ios::sync_with_stdio(false);
//优化。打消iostream的输入输出缓存
使得cin cout 时间和printf scanf 相差无几

8.压缩过的完全背包的板子 直接背诵即可

//完全背包
const ll MAXN=1e6+7;
ll f[10000005],v[10000005],c[10005],tiji,num;

int main(){
    cin>>tiji>>num;
    for(ll i=1;i<=num;i++) cin>>v[i]>>c[i];
    for(ll i=1;i<=num;i++)
        for(ll j=v[i];j<=tiji;j++)
            f[j]=max(f[j],f[j-v[i]]+c[i]);
    cout<<f[tiji];
    return 0;
}

9.一个最基础的01背包 没什么好说的

//01背包问题
const int MAXN=1e6;
ll f[MAXN],v[MAXN],c[MAXN],tiji,num;

int main(){
    cin>>tiji>>num;
    for(ll i=1;i<=num;i++) cin>>v[i]>>c[i];
    for(ll i=1;i<=num;i++)
        for(ll j=tiji;j>=v[i];j--)
            f[j]=max(f[j],f[j-v[i]]+c[i]);
    cout<<f[tiji];
    return 0;
}

10.快读的模板


//快读
inline int read(){
    int x=0; bool f=1; char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
    for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0';
    if(f) return x;
    return 0-x;
}
//模板2
int read() {

    int s=0,f=1;char ch=getchar();

    while(ch<'0' || ch>'9') {if(ch=='-')f=-1;ch=getchar();}

    while(ch>='0' && ch<='9'){s=(s<<3)+(s<<1)+(ch^48);ch=getchar();}

    return s*f;

}

11. 多重背包

//多重背包
for(int i=1;i<=n;i++)
{
    if(w[i]*a[i]>m)
    {
        for(int c=0;c<=m;c++)
        {
        if(c>=w[i])
        f[c]=max(f[c],f[c-w[i]]+v[i]);
        }
    }
    else
    {
         k=1;amount=a[i];
         while(k<amount)
         {
             for(int c=k*w[i];c>=0;c--)
             {
                 if(c>=w[i])
                 f[c]=max(f[c],f[c-w[i]]+k*v[i]);
             }
             amount-=k;
             k<<=1;
         }  
         for(int c=amount*w[i];c>=0;c--)
         {
             f[c]=max(f[c],f[c-w[i]]+amount*v[i]);
         }
    } 
}

标签:int,ll,bt,void,heap,now,Modelcode
From: https://www.cnblogs.com/mhunice/p/modelcode.html

相关文章