好用的模板……有须要的拿去
在使用中如发现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.1415926535897932384626433832795028841971 using 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; }
不断更新中