SDOI2019 省选前模板整理
代码不能折叠,不过就这样吧。有目录也还好。
wdm好多。。
可能要下辈子才能全填上✔了。✘✘✘
Update:模板不复习,考场两行泪。
我要是复习MillerRabin和快速乘就多十八分了啊TAT
不过感谢复习了可持久化Trie。
计算几何✔
最近才写了,过了过了。虽然应该忘得差不多了。
旋转卡壳:经常要找和当前直线平行的直线切在哪里,注意用底相同,平行线之间高也相同,以及叉积有正负的性质,求叉积。
DP
斜率优化✔
将DP式子写成\(y_j=kx_j+b\)的形式,其中\(k\)是与\(i\)有关的系数,\(b\)是要求的\(f_i\)及\(i\)的其他项。
四边形不等式✔
若\(f\)满足四边形不等式,则决策单调,有\(P[i][j-1]\leq P[i][j]\leq P[i+1][j]\)或\(P[i-1][j]\leq P[i][j]\leq P[i][j+1]\),可根据需要使用。
具体看这里。
实际上更大的用处是水过某些DP题...
轮廓线DP✘
nmd这东西根本写不出来的啊。
各种分治
CDQ分治✔
//6196KB 688MS(308ms 5560KB)
//https://www.cnblogs.com/SovietPower/p/8574905.html
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define MAXIN 300000
//#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e5+5,M=2e5+5;
int Ans[N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Node
{
int x,y,z,cnt,ans;
bool operator <(const Node &a)const
{
return x==a.x?(y==a.y?z<a.z:y<a.y):x<a.x;
}
bool operator !=(const Node &a)const
{
return x!=a.x||y!=a.y||z!=a.z;
}
}q[N],tmp[N];
struct BIT
{
int n,t[M];//M!
#define lb(x) (x&-x)
inline void Add(int p,int v)
{
for(; p<=n; p+=lb(p)) t[p]+=v;
}
inline int Query(int p)
{
int res=0;
for(; p; p^=lb(p)) res+=t[p];
return res;
}
inline void Clear(int p)
{
for(; p<=n&&t[p]; p+=lb(p)) t[p]=0;
}
}T;
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
void CDQ(int l,int r)
{
if(l<r)
{
int m=l+r>>1; CDQ(l,m), CDQ(m+1,r);
int p1=l,p2=m+1,p=l;
while(p1<=m&&p2<=r)
{
if(q[p1].y<=q[p2].y) T.Add(q[p1].z,q[p1].cnt), tmp[p++]=q[p1++];//q[p1].cnt!
else q[p2].ans+=T.Query(q[p2].z), tmp[p++]=q[p2++];
}
while(p2<=r) q[p2].ans+=T.Query(q[p2].z), tmp[p++]=q[p2++];
for(int i=l; i<p1; ++i) T.Clear(q[i].z);//<p1
while(p1<=m) tmp[p++]=q[p1++];
for(int i=l; i<=r; ++i) q[i]=tmp[i];
}
}
int main()
{
int n=read(); T.n=read();
for(int i=1; i<=n; ++i) q[i]=(Node){read(),read(),read(),1,0};//cnt不能是0啊= =
std::sort(q+1,q+1+n); int cnt=1;
for(int i=2; i<=n; ++i)
if(q[i]!=q[i-1]) q[++cnt]=q[i];
else ++q[cnt].cnt;
CDQ(1,cnt);
for(int i=1; i<=cnt; ++i) Ans[q[i].ans+q[i].cnt-1]+=q[i].cnt;
for(int i=0; i<n; ++i) printf("%d\n",Ans[i]);
return 0;
}
点分治✔
过。
整体二分✔
//2740kb 132ms
//https://www.cnblogs.com/SovietPower/p/9231606.html
//原数列的值,要在树状数组上减掉啊。
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 400000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e5+5,M=N*3;
int A[N],Ans[N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Operation
{
int l,r,k,id;//id=0:A[l]=r 变化量为k
}q[M];
struct BIT
{
int n,t[N];
#define lb(x) (x&-x)
inline void Add(int p,int v)
{
for(; p<=n; p+=lb(p)) t[p]+=v;
}
inline int Query(int p)
{
int res=0;
for(; p; p^=lb(p)) res+=t[p];
return res;
}
inline void Clear(int p)
{
for(; p<=n&&t[p]; p+=lb(p)) t[p]=0;
}
}T;
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
inline char GetOpt()
{
register char c=gc(); while(c!='Q'&&c!='C') c=gc();
return c;
}
void Solve(int l,int r,int h,int t)
{
static Operation q1[M],q2[M];
if(h>t) return;
if(l==r)
{
for(int i=h; i<=t; ++i) Ans[q[i].id]=l;
return;
}
bool fg=0;
for(int i=h; i<=t; ++i) if(q[i].id) {fg=1; break;}
if(!fg) return;
int m=l+r>>1,t1=0,t2=0;
for(int i=h; i<=t; ++i)
if(q[i].id)
{
int tmp=T.Query(q[i].r)-T.Query(q[i].l-1);
if(tmp>=q[i].k) q1[t1++]=q[i];
else q[i].k-=tmp, q2[t2++]=q[i];
}
else if(q[i].r<=m) T.Add(q[i].l,q[i].k), q1[t1++]=q[i];
else q2[t2++]=q[i];
for(int i=h; i<=t; ++i) if(!q[i].id&&q[i].r<=m) T.Clear(q[i].l);
for(int i=h,p=0; p<t1; q[i++]=q1[p++]);
for(int i=h+t1,p=0; p<t2; q[i++]=q2[p++]);
Solve(l,m,h,h+t1-1), Solve(m+1,r,h+t1,t);
}
int main()
{
int n=read(),Q=read(),tot=0,now=n,mn=1e9,mx=0;
for(int i=1; i<=n; ++i) q[i]=(Operation){i,A[i]=read(),1,0},mx=std::max(mx,A[i]),mn=std::min(mn,A[i]);
for(int i=1,p; i<=Q; ++i)
if(GetOpt()=='Q') q[++now]=(Operation){read(),read(),read(),++tot};
else p=read(),q[++now]=(Operation){p,A[p],-1,0},q[++now]=(Operation){p,A[p]=read(),1,0},mx=std::max(mx,A[p]),mn=std::min(mn,A[p]);//修改原数列!
T.n=n, Solve(mn,mx,1,now);
for(int i=1; i<=tot; ++i) printf("%d\n",Ans[i]);
return 0;
}
数据结构
线段树、树状数组、Trie树、树剖、二维线段树、主席树略
树分块...我还不会卡不掉的树分块。。。
线段树合并✔
Merge
的时候不要写Update(x)
就好了...
分块✔
查询区间\(k\)的倍数时,对于整块加\(val\),可以变成求这块模\(k=k-val\)的数的个数,这样只需要维护一个模数标记(初始为\(0\)),这样就将整块加转化成了标记的\(O(1)\)修改。
这个思路挺好的,应该能拓展。
K-D Tree
LCT
http://www.cnblogs.com/SovietPower/category/1182810.html
//520ms 2984KB
//https://www.cnblogs.com/SovietPower/p/8615938.html
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define MAXIN 300000
//#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=3e5+5;
char IN[MAXIN],*SS=IN,*TT=IN;
struct LCT
{
#define ls son[x][0]
#define rs son[x][1]
int fa[N],son[N][2],sum[N],val[N],sk[N];
bool rev[N];
inline void Update(int x)
{
sum[x]=sum[ls]^sum[rs]^val[x];
}
inline bool n_root(int x)
{
return son[fa[x]][0]==x||son[fa[x]][1]==x;
}
inline void Rev(int x)
{
std::swap(ls,rs), rev[x]^=1;
}
inline void PushDown(int x)
{
if(rev[x]) Rev(ls), Rev(rs), rev[x]=0;
}
void Rotate(int x)
{
int a=fa[x],b=fa[a],l=son[a][1]==x,r=l^1;
if(n_root(a)) son[b][son[b][1]==a]=x;
if(son[x][r]) fa[son[x][r]]=a;
fa[x]=b, fa[a]=x, son[a][l]=son[x][r], son[x][r]=a;
Update(a);
}
void Splay(int x)
{
int t=1,a=x; sk[1]=a;
while(n_root(a)) sk[++t]=a=fa[a];
while(t) PushDown(sk[t--]);
while(n_root(x))
{
if(n_root(a=fa[x])) Rotate(son[a][0]==x^son[fa[a]][0]==a?x:a);
Rotate(x);
}
Update(x);
}
void Access(int x)
{
for(int pre=0; x; x=fa[pre=x])
Splay(x), rs=pre, Update(x);
}
void MakeRoot(int x)
{
Access(x), Splay(x), Rev(x);
}
void Split(int x,int y)
{
MakeRoot(x), Access(y), Splay(y);
}
int FindRoot(int x)
{
Access(x), Splay(x);
while(ls) x=ls;
return x;
}
void Link(int x,int y)
{
MakeRoot(x);
if(FindRoot(y)!=x) fa[x]=y;
}
void Cut(int x,int y)
{
MakeRoot(x);
if(FindRoot(y)==x&&fa[x]==y&&!rs) fa[x]=son[y][0]=0, Update(y);
}
}T;
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
int main()
{
int n=read(),q=read();
for(int i=1; i<=n; ++i) T.val[i]=read();
for(int x,y; q--; )
switch(read())
{
case 0: x=read(),y=read(),T.Split(x,y),printf("%d\n",T.sum[y]); break;
case 1: x=read(),y=read(),T.Link(x,y); break;
case 2: x=read(),y=read(),T.Cut(x,y); break;
case 3: T.Splay(x=read()),T.val[x]=read(); break;
}
return 0;
}
可持久化Trie✔
https://i.cnblogs.com/posts?categoryid=1161664
Splay
http://www.cnblogs.com/SovietPower/p/8435011.html
fhq Treap
http://www.cnblogs.com/SovietPower/p/8431909.html
虚树
可并堆 左偏树*
http://www.cnblogs.com/SovietPower/p/8435041.html
数学,数论
CRT
扩展CRT
Lucas
扩展Lucas
杜教筛✔
Min25筛
莫比乌斯反演✔
FFT,NTT✔
#include <cmath>
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=(1<<21)+5;
const double PI=acos(-1);
int rev[N];
struct Complex
{
double x,y;
Complex(double x=0,double y=0):x(x),y(y) {}
inline Complex operator +(const Complex &a)const {return Complex(x+a.x, y+a.y);}
inline Complex operator -(const Complex &a)const {return Complex(x-a.x, y-a.y);}
inline Complex operator *(const Complex &a)const {return Complex(x*a.x-y*a.y, x*a.y+y*a.x);}
}f[N],g[N],W[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
void FFT(Complex *a,int lim,int opt)
{
static Complex w[N];
for(int i=0; i<lim; ++i) if(i<rev[i]) std::swap(a[i],a[rev[i]]);
for(int i=2; i<=lim; i<<=1)
{
int mid=i>>1;
Complex Wn(cos(PI/mid),opt*sin(PI/mid));
for(int j=0; j<lim; j+=i)
{
Complex w(1,0),t;
for(int k=j; k<j+mid; ++k,w=w*Wn)
a[k+mid]=a[k]-(t=w*a[k+mid]), a[k]=a[k]+t;
}
// if(~opt) for(int k=0,t=lim/i; k<mid; ++k) w[k]=W[k*t];
// else for(int k=0,t=lim/i; k<mid; ++k) w[k]=Complex(W[k*t].x,-W[k*t].y);
// for(int j=0; j<lim; j+=i)
// {
// Complex t;
// for(int k=j; k<j+mid; ++k)
// a[k+mid]=a[k]-(t=w[k-j]*a[k+mid]), a[k]=a[k]+t;
// }
}
if(opt==-1) for(int i=0; i<lim; ++i) a[i].x/=lim;
}
int main()
{
int n=read()+1,m=read()+1;
for(int i=0; i<n; ++i) f[i].x=read();
for(int i=0; i<m; ++i) g[i].x=read();
int lim=1,bit=-1;
while(lim<=n+m) lim<<=1,++bit;
for(int i=1; i<lim; ++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<bit);
// for(int i=0,t=lim>>1; i<lim; ++i) W[i]=Complex(cos(i*PI/t),sin(i*PI/t));
FFT(f,lim,1), FFT(g,lim,1);
for(int i=0; i<lim; ++i) f[i]=f[i]*g[i];
FFT(f,lim,-1);
for(int i=0,l=n+m-2; i<=l; ++i) printf("%d ",int(f[i].x+0.5));
return 0;
}
#include <cstdio>
#include <cctype>
#include <algorithm>
#define mod 998244353
#define G 3
#define invG 332748118
#define Mod(x) x>=mod&&(x-=mod)
#define gc() getchar()
typedef long long LL;
const int N=(1<<21)+5;
int f[N],g[N],rev[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
inline int FP(int x,int k)
{
int t=1;
for(; k; k>>=1,x=1ll*x*x%mod) k&1&&(t=1ll*t*x%mod);
return t;
}
void NTT(int *a,int lim,int opt)
{
for(int i=0; i<lim; ++i) if(i<rev[i]) std::swap(a[i],a[rev[i]]);
for(int i=2; i<=lim; i<<=1)
{
int mid=i>>1; LL Wn=FP(~opt?G:invG,(mod-1)/i);
for(int j=0; j<lim; j+=i)
for(int k=j,t,w=1; k<j+mid; ++k,w=w*Wn%mod)
a[k+mid]=a[k]+mod-(t=1ll*w*a[k+mid]%mod), Mod(a[k+mid]), a[k]+=t, Mod(a[k]);
}
if(opt==-1) for(int i=0,inv=FP(lim,mod-2); i<lim; ++i) a[i]=1ll*a[i]*inv%mod;
}
int main()
{
int n=read()+1,m=read()+1;
for(int i=0; i<n; ++i) f[i]=read();
for(int i=0; i<m; ++i) g[i]=read();
int lim=1,bit=-1;
while(lim<=n+m) lim<<=1,++bit;
for(int i=1; i<lim; ++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<bit);
NTT(f,lim,1), NTT(g,lim,1);
for(int i=0; i<lim; ++i) f[i]=1ll*f[i]*g[i]%mod;
NTT(f,lim,-1);
for(int i=0,l=n+m-2; i<=l; ++i) printf("%d ",f[i]);
return 0;
}
FWT✔
BSGS
Miller Rabin*
Pollard Rho*
Catalan数 Stirling数
高斯消元
拉格朗日插值✔
单纯形*
线性基
博弈论
图论
最短路、生成树、次小生成树略。
Prufer序列
Tarjan
差分约束
二分图匹配
欧拉路、哈密顿路
圆方树
支配树*
2-SAT*
Matrix Tree*
http://www.cnblogs.com/SovietPower/p/8463968.html
网络流
Dinic、ISAP、费用流略。
无源汇上下界网络流✔
有源汇上下界网络流✔
有源汇上下界最小流✔
字符串
KMP✔
https://www.luogu.org/recordnew/show/15171303
Manacher✔
http://www.cnblogs.com/SovietPower/p/8677979.html
回文树✔
//110ms 34876KB
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=3e5+5;
struct PAM
{
int tot,las,fail[N],len[N],val[N],son[N][26];
char s[N];
PAM() {tot=1, las=0, fail[0]=1, len[1]=-1, s[0]='$';}
inline int Find(int x,int n)
{
while(s[n-len[x]-1]!=s[n]) x=fail[x];
return x;
}
void Insert(int c,int n)
{
int p=Find(las,n);
if(!son[p][c])
{
int np=++tot; fail[np]=son[Find(fail[p],n)][c];
son[p][c]=np, len[np]=len[p]+2;
}
++val[las=son[p][c]];
}
void Solve()
{
scanf("%s",s+1); int n=strlen(s+1);
for(int i=1; i<=n; ++i) Insert(s[i]-'a',i);
LL ans=0;
for(int x=tot; x>1; --x)
ans=std::max(ans,1ll*val[x]*len[x]), val[fail[x]]+=val[x];
printf("%lld\n",ans);
}
}pam;
int main()
{
pam.Solve();
return 0;
}
后缀数组✔
//297ms 15228kb
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=1e6+5;
struct Suffix_Array
{
int rk[N],sa[N],sa2[N],tm[N],ht[N];
char s[N];
void Build(char *s,int n,int m)
{
int *x=rk,*y=sa2;
for(int i=0; i<=m; ++i) tm[i]=0;
for(int i=1; i<=n; ++i) ++tm[x[i]=s[i]-'a'+1];
for(int i=1; i<=m; ++i) tm[i]+=tm[i-1];
for(int i=n; i; --i) sa[tm[x[i]]--]=i;
for(int k=1,p=0; k<n; k<<=1,m=p,p=0)
{
for(int i=n-k+1; i<=n; ++i) y[++p]=i;
for(int i=1; i<=n; ++i) if(sa[i]>k) y[++p]=sa[i]-k;
for(int i=1; i<=m; ++i) tm[i]=0;
for(int i=1; i<=n; ++i) ++tm[x[i]];
for(int i=1; i<=m; ++i) tm[i]+=tm[i-1];
for(int i=n; i; --i) sa[tm[x[y[i]]]--]=y[i];
std::swap(x,y), x[sa[1]]=p=1;
for(int i=2; i<=n; ++i)
x[sa[i]]=(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k])?p:++p;
if(p>=n) break;
}
for(int i=1; i<=n; ++i) rk[sa[i]]=i;
ht[1]=0;
for(int i=1,k=0; i<=n; ++i)
{
if(rk[i]==1) continue;
if(k) --k;
int p=sa[rk[i]-1];
while(i+k<=n && p+k<=n && s[i+k]==s[p+k]) ++k;
ht[rk[i]]=k;
}
}
void Solve()
{
scanf("%s",s+1); int n=strlen(s+1);
Build(s,n,27);
for(int i=1; i<=n; ++i) printf("%d ",sa[i]); puts("");
for(int i=2; i<=n; ++i) printf("%d ",ht[i]); puts("");
}
}sa;
int main()
{
sa.Solve();
return 0;
}
AC自动机
http://www.cnblogs.com/SovietPower/p/8530327.html
后缀自动机
其它
dsu on tree
长链剖分
高维前缀和✔
带权二分
模拟退火
一般莫队✔
常搭配分块使用(莫队本身\(O(n\sqrt n)\)次修改,\(O(n)\)次查询)。
优化什么的(分奇偶),不管惹。
带修改莫队
回滚莫队✔
还是将所有询问按\((左端点所在块,\ 右端点)\)排序。对于左右端点在同一块里的询问,暴力查询。
否则,把左端点在同一块\(i\)里的询问一起处理。这时右端点一定是递增的。
令\(l\)为第\(i+1\)块(下一块)的左端点,\(r\)为第\(i\)块(该块)的右端点。将\(r\)移动到当前询问的右端点处并更新答案,记录此时答案\(tmp=Now\)。
将\(l\)移动到当前询问的左端点处并更新答案,得到当前询问的答案\(Now\)。
将\(l\)移回到下一块左端点位置,并消除影响(减掉加的次数之类的),并令\(Now=tmp\)。
SDOI2019 省选前模板整理的更多相关文章
- [OI]省选前模板整理
省选前把板子整理一遍,如果发现有脑抽写错的情况,欢迎各位神犇打脸 :) 数学知识 数论: //组合数 //C(n,m) 在n个数中选m个的方案数 ll C[N][N]; void get_C(int ...
- NOIP前模板整理
图 最短路径 #include <queue> #define N 1000 typedef long long ll; using namespace std; int d[N], w[ ...
- [TaskList] 省选前板子补完计划
省选前本子补完计划 [ ] 带权并查集 [ ] 树上莫队 - UOJ58 [WC2013]糖果公园 loj2485「CEOI2017」Chase
- 省选前的JOI
RT,发现找不到题,于是又开了新坑 JOI特色:重思考,代码难度(相比NOI系列)基本没有 (省选前到处挖坑2333) JOI 2017 Final 焚风现象 差分,莫得了 (不是看到200ms就tm ...
- 省选前的th题
沙茶博主终于整完了知识点并学完了早该在NOIP之前学的知识们 于是终于开始见题了,之前那个奇怪的题单的结果就是这个了 题目按沙茶博主的做题顺序排序 个人感觉(暂时)意义不大的已被自动忽略 洛谷 491 ...
- 字符串系列——KMP模板整理
KMP模板整理 KMP与扩展KMP: /*vs 2017/ vs code以外编译器,去掉windows.h头文件和system("pause");*/ #include<i ...
- ACM算法模板整理
史诗级ACM模板整理 基本语法 字符串函数 istream& getline (char* s, streamsize n ); istream& getline (char* s, ...
- 解决el-tree lazy懒加载时,连续勾选前两个子节点后第二次进入默认选中时,将父节点也勾选的问题
在用到el-tree的懒加载和默认勾选功能时,若第一次勾选前几个连续节点,第二次进入默认勾选时,由于el-tree子节点尚未完全加载(只加载出来前几个),默认勾选已经开始(已加载出来的子节点被默认勾选 ...
- 【POJ各种模板汇总】(写在逆风省选前)(不断更新中)
1.POJ1258 水水的prim……不过poj上硬是没过,wikioi上的原题却过了 #include<cstring> #include<algorithm> #inclu ...
随机推荐
- 洛谷P3205 [HNOI2011]合唱队 DP
原题链接点这里 今天在课上听到了这个题,听完后觉得对于一道\(DP\)题目来说,好的状态定义就意味着一切啊! 来看题: 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需 ...
- expansion pattern ‘Frame&’ contains no argument packs
camera/CameraImpl.h::: error: expansion pattern ‘Frame&’ contains no argument packs void read_fr ...
- jieba 库的使用和好玩的词云
jieba库的使用: (1) jieba库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式.全模式和搜索引擎模式,下面是三种模式的特点. 精确模式:试图将语句最精 ...
- Servlet中转发和重定向的路径问题【转】
转发和重定向的路径问题 Servlet中有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获 ...
- JENKINS针对不同项目组对用户进行权限分配
权限需求 因JENKINS上存有de(开发).te(测试).re(预发布)等三个不同环境的项目,同时因为项目需求,需要对不同的开发及测试人员配置不同的jenkins权限,即以项目为单位,对不同人员进行 ...
- LFYZ-OJ ID: 1008 求A/B高精度值
思路 小数点前的部分可以通过m/n直接计算得出 小数点后的20位可通过循环进行快速计算,计算方法如下: m%=n m*=10 小数点后第i位为m/n,回到第1步 第3步后,如果m%n为0,说明已经除净 ...
- DevExpress设置默认皮肤及各种皮肤样式
DevExpress设置默认皮肤及各种皮肤样式 设置默认皮肤代码: 在程序入口Program.cs里添加如下代码 引用using DevExpress.LookAndFeel; UserLookAnd ...
- YYS FZU - 2278 (期望)JAVA
题目链接: G - YYS FZU - 2278 题目大意: 我们现在想要收集到n个卡片,现在已知抽到每种卡片的概率为1/n,现在每隔(n-1)!天就可以进行一次抽奖,问收集齐所有卡片的期望天数. 具 ...
- auto类型说明符
auto让编译器通过出初始值来推算变量的类型,显然,auto定义的变量必须有初始值: //由val1和val2相加的结果可以推断出item的类型 auto item = val1 + val2;//i ...
- C# - 多线程(基础)
多线程 基础(Multithreading) 一些基本的关于线程和与其相关的概念 位)的变量赋值,这个操作就是原子性的.因为它可以一次性填充64位的二进制数据到栈上,属于一步完成,不会发生断裂.而假如 ...