好用的模板(不断增补中)

来源:互联网 发布:ubuntu 硬盘大小 编辑:程序博客网 时间:2024/05/28 18:45

好用的模板……有需要的拿去

在使用中如发现bug欢迎留言指出

1、打codeforces的比赛的时候是不是像我一样感觉时间不够用,恨不得多长几只手打代码?其实看看神犇的代码会发现,他们为节省时间都是直接在编译器的缺省值里打一堆头文件,还有一些神奇的#define……balabala的,我把自己打cf常用的头文件还有一些常用的define,以及快速读入搞成模板放上来

#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<deque>#include<set>#include<map>#include<ctime>#define LL long long#define inf 0x7ffffff#define pa pair<int,int>#define pi 3.1415926535897932384626433832795028841971using namespace std;inline LL read(){    LL x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}int main(){}

2、高精度实在是让人头疼的东西,每次写加减乘除读入输出都好麻烦……目前写了非负高精整数的加减乘minmax……放模板

#define mx 100//高精位数struct gaojing{     int len;     int a[mx+10];};//定义高精度非负数类型inline void set0(gaojing &s)//高精清零{    s.len=1;    for (int i=1;i<=mx+5;i++)s.a[i]=0;}inline void inputn(gaojing &a)//高精输入{  set0(a);    char ch=getchar();    while (ch<'0'||ch>'9')ch=getchar();      while (ch>='0'&&ch<='9')      {          a.a[a.len++]=ch-'0';        ch=getchar();    }    a.len--;      int change[mx+15];    for (int i=1;i<=a.len;i++)        change[i]=a.a[i];      for (int i=1;i<=a.len;i++)        a.a[i]=change[a.len-i+1];    while (a.a[a.len]==0)a.len--;}  inline void put(gaojing a)//高精输出并换行{        for (int i=a.len;i>=1;i--)printf("%d",a.a[i]);    printf("\n");}inline int cmp(const gaojing &a,const gaojing &b)//比较:a<b:1  a>b:-1  a==b:0  {      if (a.len!=b.len)      {          if (a.len<b.len)return 1;          else return -1;      }      for (int i=a.len;i>=1;i--)      if(a.a[i]<b.a[i])return 1;      else if (a.a[i]>b.a[i])return -1;    return 0;}  inline gaojing max(const gaojing &a,const gaojing &b)//高精度max {      int opr=cmp(a,b);    if (opr==1)return b;    else return a;}inline gaojing min(const gaojing &a,const gaojing &b)//高精度min{int opr=cmp(a,b);if (opr==1)return a;else return b;} inline gaojing operator + (const gaojing &a,const gaojing &b)//高精度加法{      gaojing c;set0(c);      int maxlen=max(a.len,b.len);          for (int i=1;i<=maxlen;i++)          {              c.a[i]=c.a[i]+a.a[i]+b.a[i];              if (c.a[i]>=10)              {                  c.a[i+1]+=c.a[i]/10;                c.a[i]%=10;            }        }          c.len=maxlen+4;          while (!c.a[c.len]&&c.len>1) c.len--;        return c;}inline gaojing operator - (const gaojing &a,const gaojing &b)//高精度减法,需保证a>b{  gaojing c;set0(c);gaojing d;d=a;    for (int i=1;i<=b.len;i++)        {          c.a[i]=d.a[i]-b.a[i];          if (c.a[i]<0)          {              c.a[i]+=10;              int now=i+1;              while (!d.a[now])              {                  d.a[now]=9;                  now++;              }              d.a[now]--;          }        }    for (int i=b.len+1;i<=d.len;i++)c.a[i]=d.a[i];      c.len=d.len;      while (c.a[c.len]==0&&c.len>1)c.len--;    return c;}  inline gaojing operator * (const gaojing &a,const gaojing &b)//高精度乘法{      gaojing c;set0(c);        for(int i=1;i<=a.len;i++)          for (int j=1;j<=b.len;j++)            c.a[i+j-1]+=a.a[i]*b.a[j];        int mxlen=a.len+b.len+5;      for (int i=1;i<=mxlen;i++)          {            c.a[i+1]+=c.a[i]/10;            c.a[i]%=10;          }        while (c.a[mxlen]==0)mxlen--;        c.len=mxlen;        return c;}

不断更新中

0 0
原创粉丝点击