cf期望概率专题
cf1009E:求到第i段期望和的比较困难,但是单独求每段的期望是比较容易的,所以单独对每段求和,然后累计总和
E[i]=1/2*a1+1/4*a2+...+1/2^(i-1)*ai-1+1/2^(i-1)*ai,E[1-n]是可以递推的
#include<bits/stdc++.h>
using namespace std;
#define ll long long const int maxn = 1e6+;
const ll mod = ; int n;
ll a[maxn],dp[maxn],P[maxn]; int main(){
cin>>n;
for(int i=;i<=n;i++)scanf("%lld",&a[i]);
P[]=;
for(int i=;i<=n;i++)P[i]=P[i-]*%mod; dp[]=a[]*P[n-]%mod;
for(int i=;i<=n;i++){
dp[i]=((dp[i-]-a[i-]*P[n-i]%mod)%mod+mod)%mod;
dp[i]=(dp[i]+a[i]*P[n-i]%mod)%mod;
} ll ans=;
for(int i=;i<=n;i++)
ans=(ans+dp[i])%mod;
cout<<ans<<'\n';
}
cf168b:概率+背包dp,每件物品有获得概率p,有的物品会消耗掉一格体积,有的物品可以扩容,问得到l个物品并且都装下的概率
dp[i][j][l]表示前i个物品,得到j个,剩下容量为l的概率,转移方程:dp[i][j][k]=pi*dp[i-1][j-1][k-ai]+(1-pi)dp[i-1][j][k]
因为是无序的,所以背包偏移+200来保证第三维下标为正,注意要从当前状态推导到下一状态
#include<bits/stdc++.h>
using namespace std;
#define N 205
double dp[N][N][N<<];
int n,L,k,a[N];
double p[N];
int main(){
cin>>n>>L>>k;
for(int i=;i<=n;i++)cin>>p[i],p[i]*=0.01;
for(int i=;i<=n;i++)cin>>a[i]; dp[][][+k]=;
for(int i=;i<=n;i++){
for(int j=;j<=i;j++)
for(int l=;l<=;l++){
dp[i][j][l]+=(-p[i])*dp[i-][j][l];//没赢
if(a[i]==-){//是奖品
if(l)dp[i][j+][l-]+=p[i]*dp[i-][j][l];
}
else {//是背包
dp[i][j+][min(l+a[i],)]+=p[i]*dp[i-][j][l];
}
}
} double ans=;
for(int j=L;j<=n;j++)
for(int l=;l<=;l++)
ans+=dp[n][j][l];
printf("%.10lf\n",ans);
}
cf513C——细节题:枚举拍卖价格i,用长度为n的二进制位,1表示第j个人出价>=i
n个里起码选两个1 ,这时有两种情况 1:一个选择>i,剩下的选的=i的概率,2:都选i的概率
每种状态的12情况的概率叠加,i的所有状态概率叠加就是价格为i时的概率
/*
枚举拍卖价格i
用长度为n的二进制位,1表示第j个人出价>=i,0反之
n个里起码选两个1
1:一个选择>i,剩下的选的=i的概率
2:都选i的概率
每种状态的12情况的概率叠加
所有状态概率叠加就是价格为i时的概率
*/
#include<bits/stdc++.h>
using namespace std;
#define N 10005
int n,L[],R[];
double ans[N];
int count(int x){
int res=;
for(int i=;i<n;i++)
if(x>>i & )res++;
return res;
}
int main(){
cin>>n;
for(int i=;i<n;i++)cin>>L[i]>>R[i];
for(int i=;i<=;i++){
for(int S=;S<(<<n);S++)if(count(S)>=){
double pp1=;
for(int j=;j<n;j++)if(S>>j & ){//情况1,枚举第j个作为>i的选项
double p1=;
if(L[j]>i)p1=;
else if(R[j]<=i)p1=;
else if(R[j]>i && L[j]<=i)p1*=1.0*(R[j]-i)/(R[j]-L[j]+); for(int k=;k<n;k++)if(k!=j){
if(S>>k & ){
if(R[k]<i || L[k]>i)p1=;
else p1*=1.0/(R[k]-L[k]+);
}
else {
if(L[k]>=i)p1=;
else if(R[k]<i)p1*=;
else if(L[k]<i && R[k]>=i)p1*=1.0*(i-L[k])/(R[k]-L[k]+);
}
} pp1+=p1;
} double p2=;//情况2,都选i
for(int j=;j<n;j++){
if(S>>j & ){//第j人等于i
if(L[j]>i || R[j]<i)p2=;
p2*=1.0/(R[j]-L[j]+);
}
else {//第j人小于i
if(R[j]<i)p2*=;
else if(L[j]>=i)p2=;
else if(L[j]<i && R[j]>=i)p2*=1.0*(i-L[j])/(R[j]-L[j]+);
}
} ans[i]+=pp1+p2;
}
}
double sum=;
for(int i=;i<=;i++)
sum+=ans[i]*i;
printf("%.10lf\n",sum);
}
cf846F——期望线性性
由期望的线性可加性,每个ai的贡献可以单独计算,每个ai的贡献当且仅当其作为区间[L,R]第一个出现的值
设ai上一次出现的位置是L[ai], 那么ai有贡献的区间总共有2*(i-L[ai])*(n-i+1)-1
用序列自动机往前跳
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1000005
int n,a[N],L[N],pos[N];
double ans;
int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<=n;i++){
L[i]=pos[a[i]];
pos[a[i]]=i;
}
for(int i=;i<=n;i++)
if(L[i]==i) ans+=*(n-i+)-;
else ans+=2ll*(i-L[i])*(n-i+)-;
ans/=1ll*n*n;
printf("%.10lf\n",ans);
}
cf109b——求概率转化为 统计所有合法情况个数/所有情况个数
- 先把所有lucky数打表,排序后存在数组里
- 一段区间内恰好有k个数,那么这k个数必定是连续的,我们枚举枚举这一段连续的的左右下标i,j可以得到两个取值区间
- 左边界 [v[i-1]+1,v[i]] 右边界[v[j],v[j+1]-1],然后这两个边界再和[pl,pr],[vl,vr]求交,求有多少可能的取值
- 求出对于每个i,j的合法边界个数,然后统计求和就可以
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[],cnt,pl,pr,vl,vr,k;
void dfs(ll num){
if(num>=1e9)return;
if(num)a[++cnt]=num;
dfs(num*+);dfs(num*+);
}
ll jiao(ll L1,ll R1,ll L2,ll R2){//求区间交的长度
if(R1<L2 || R2<L1)return ;//不相交
ll L=max(L1,L2),R=min(R1,R2);
return R-L+;
}
int main(){
dfs();
cin>>pl>>pr>>vl>>vr>>k;
sort(a+,a++cnt);
a[cnt+]=1e9; ll ans=;
for(int i=;i+k-<=cnt;i++){
int j=i+k-;
ll tmp1=jiao(pl,pr,a[i-]+,a[i]);
ll tmp2=jiao(vl,vr,a[j],a[j+]-);
ll tmp3=jiao(vl,vr,a[i-]+,a[i]);
ll tmp4=jiao(pl,pr,a[j],a[j+]-);
if(k==){//特判处理
ans+=tmp1*tmp2+tmp3*tmp4;
ll tmp5=jiao(pl,pr,a[i],a[i]);
ll tmp6=jiao(vl,vr,a[i],a[i]);
if(tmp5 && tmp6)ans--;//(a[i],a[i]这种情况算了两次)
}
else
ans+=tmp1*tmp2+tmp3*tmp4;
}
printf("%.10lf\n",1.0*ans/((pr-pl+)*(vr-vl+)));
}
cf54C——求概率转化为 统计所有合法情况个数/所有情况个数
问题:n个数,每个数的取值范围是[Li,Ri], 那么 k%的数第一个数为1的概率是多少
思路:先求出每个数取到首位为1的概率,然后用背包dp[i][j]表示前i个数有j个首位为1的概率
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1005
ll n,L[N],R[N],K,k;
double p[N],dp[N][N]; ll jiao(ll L1,ll R1,ll L2,ll R2){
/* cout<<R1-L2<<" ";
cout<<R2-L1<<"\n";
*/ if(R1<L2 || R2<L1) return ;
ll L=max(L1,L2),R=min(R1,R2);
return R-L+;
}
double calc(ll low,ll up){
ll sum=;
for(ll p=;p<=1e18;p*=){
sum+=jiao(p,p*-,low,up);
if(p==1e18)break;
}
return 1.0*sum/(up-low+);
} int main(){
cin>>n;
for(int i=;i<=n;i++){
cin>>L[i]>>R[i];
p[i]=calc(L[i],R[i]);
}
cin>>K;
k=(n*K)/;
if(n*K%!=)
k++; dp[][]=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
dp[i][j]+=(-p[i])*dp[i-][j];
if(j)
dp[i][j]+=p[i]*dp[i-][j-];
}
double ans=;
for(int i=k;i<=n;i++)
ans+=dp[n][i];
printf("%.10lf\n",ans);
}
CF540D——概率递推dp(倒序dp或记忆化搜索)
用r个石头,s个剪刀,p个布,两个不同的相遇会减掉输的那个,相同的相遇则会不变
问最后只剩下石头,只剩下剪刀,只剩下布的概率
dp[i][j][k]表示剩下i个石头,j个剪刀,k个布的概率
因为本题初始状态是dp[r][s][p]=1,目标状态是dp[0][0][0],所以沿着这个状态从后往前推导就行
最后求出dp[1-r][0][0]就是石头的答案,其它同理
#include<bits/stdc++.h>
using namespace std;
#define N 105
int r,s,p;
double dp[N][N][N];
int main(){
cin>>r>>s>>p;
dp[r][s][p]=;
for(int i=r;i>=;i--)
for(int j=s;j>=;j--)
for(int k=p;k>=;k--){
if(i==r && j==s && k==p)continue;
int base=(i+j+k+)*(i+j+k+);
if(i+<=r && (j!=||k!=))dp[i][j][k]+=2.0*(i+)*k/(base-(i+)*(i+)-j*j-k*k)*dp[i+][j][k];
if(j+<=s && (i!=||k!=))dp[i][j][k]+=2.0*(j+)*i/(base-i*i-(j+)*(j+)-k*k)*dp[i][j+][k];
if(k+<=p && (i!=||j!=))dp[i][j][k]+=2.0*(k+)*j/(base-i*i-j*j-(k+)*(k+))*dp[i][j][k+];
}
double ans1=,ans2=,ans3=;
for(int i=;i<=r;i++)ans1+=dp[i][][];
for(int j=;j<=s;j++)ans2+=dp[][j][];
for(int k=;k<=p;k++)ans3+=dp[][][k];
printf("%.10lf %.10lf %.10lf\n",ans1,ans2,ans3);
}
cf351b——期望递推dp
给定一个初始排列{n},AB两个人轮流操作
A选择一个相邻的对交换位置
B 0.5概率随机交换一个相邻的逆序对,0.5几率随机交换一个相邻的顺序对,如果没有则不交换
当排列为递增排列时结束操作,A的策略是使两人操作次数最少,问期望操作次数
先统计逆序对cnt,然后每次要么减一个逆序对,要么加一个逆序对,然后再减一个逆序对
E[i]消i个逆序对的期望步数,因为AB两个操作分割后难以递推,那么直接一轮一轮绑定来算,
E[i]=0.5*(E[i-2]+2)+0.5*(E[i]+2)
E[0]=0,E[1]=1,求E[cnt]
#include<bits/stdc++.h>
using namespace std;
#define N 3005
int n,p[N];
int C[N];
void update(int x,int v){
while(x<=n){
C[x]+=v;
x+=x&-x;
}
}
int query(int x){
int res=;
while(x){
res+=C[x];
x-=x&-x;
}
return res;
}
double E[N*N];
int main(){
cin>>n;
int cnt=;
for(int i=;i<=n;i++){
cin>>p[i];
cnt+=query(n)-query(p[i]);
update(p[i],);
}
E[]=;E[]=;
for(int i=;i<=cnt;i++)
E[i]=+E[i-];
printf("%lf\n",E[cnt]);
}
cf235b——概率期望的性质,
n个点,第i个点有pi概率是1,对于一段连续的长度为len的1,得分为len*len,问这个序列的得分期望值
核心:把求连续段的期望 转化成求在这个连续段内任意点对(i,j)的贡献期望和+单点的贡献期望和
长度为len的段得分为len*len,考虑到平方,可以将其转化为统计点对
那么 len*len=2*C(len,2)+len
由这个等式右边第一项可以看出,长为len的连续段里每个点对(i,j)的贡献是2,这个点对出现的概率是mul{p[i]...p[j]}
原来要求的是len段的期望:len*len*其出现的概率,现在把这个段的期望拆成很多点对期望的和,(i,j)的期望就是2*mul{p[i]..p[j]}
右边第二项可以看出每个单点的贡献是1, 其出现概率就是pi
最后的结果是任意两个点对的期望和*2+单点期望和
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const MAX = 1e5 + ;
double dp[MAX], p[MAX]; int main()
{
int n;
scanf("%d", &n);
double ans = ;
for(int i = ; i <= n; i++)
{
scanf("%lf", &p[i]);
ans += p[i];
}
for(int i = ; i <= n; i++)
{
dp[i] = (dp[i - ] + p[i - ]) * p[i];
ans += * dp[i];
}
printf("%.10f\n", ans);
}
cf768D——标准二维概率dp
一开始想着按求期望那个套路来求,最后发现一个二维概率dp可以直接解决
有k种不同的球,每天随机得到一种颜色的球,问每种球至少得到一个的概率大于p的期望天数
dp[i][j]表示前i天得到j个不同的求的概率
dp[0][0]=1,dp[1][1]=1
dp[i][j]=j/k*dp[i-1][j]+(k-(j-1))/k*dp[i-1][j-1]
目标状态是dp[1..10000][k]
对于每个询问p,枚举i[1,10000],只要dp[i][k]>=p,就是答案
#include<bits/stdc++.h>
using namespace std;
#define N 1005
double p,dp[][N];
int k,q;
int main(){
cin>>k>>q;
dp[][]=;
for(int i=;i<=;i++)
for(int j=;j<=min(i,k);j++)
dp[i][j]=1.0*j/k*dp[i-][j]+1.0*(k-(j-))/k*dp[i-][j-];
while(q--){
cin>>p;
p/=;
for(int i=;i<=;i++)
if(dp[i][k]>=p){
cout<<i<<'\n';
break;
}
}
}
cf15E——状态压缩+概率dp
/*
dp[S]表示状态为S的概率
dp[(1<<n)-1]=1,从大到小枚举S(或记忆化搜索),然后再枚举任意一个数位,来更新其他状态就可以
复杂度约为2^26
*/
#include<bits/stdc++.h>
using namespace std;
int n;
double dp[<<],a[][];
int count(int S){
int res=;
for(int i=;i<n;i++)
if(S>>i & )res++;
return res;
}
int main(){
cin>>n;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
cin>>a[i][j]; int mask=(<<n)-;
dp[mask]=; for(int S=mask;S;S--){
int cnt=count(S);
if(cnt<=)continue;
cnt=cnt*(cnt-)/;
for(int i=;i<n;i++)if(S>>i & ){
for(int j=i+;j<n;j++)if(S>>j & ){
if(i==j)continue;
dp[S-(<<j)]+=a[i][j]*dp[S]/cnt;
dp[S-(<<i)]+=a[j][i]*dp[S]/cnt;
}
}
} for(int i=;i<n;i++)
printf("%.10lf ",dp[<<i]); return ;
}
cf912d——优先队列贪心
- 在nm网格图上标记k个点,然后用r*r的矩阵随机覆盖网格图,得分是覆盖住的点的个数
- 现在求一种标记策略,使随机覆盖得分的期望最大
- 对于一种标记策略,随机覆盖的期望可以转化为每个点被覆盖的期望值之和
- 显然最中间的点的被覆盖期望最大,然后是其四周,依次类推
- 用优先队列来维护,每次弹出一个元素,加入其周围四个元素,取前k个
#include<bits/stdc++.h>
#include<queue>
using namespace std;
#define N 100005
#define ll long long
struct Node{
ll x,y;
double e;
Node(){}
Node(ll x,ll y,double e):x(x),y(y),e(e){}
};
bool operator<(Node a,Node b){
return a.e<b.e;
}
priority_queue<Node>pq;
map<pair<ll,ll> ,int>vis;
double ans; ll n,m,r,k;
double calc(ll x,ll y){
ll up=max(1ll,x-r+),down=min(n-r+,x);
ll left=max(1ll,y-r+),right=min(m-r+,y);
return 1.0*(down-up+)*(right-left+)/(n-r+)/(m-r+);
} int a[]={-,,,},b[]={,,,-}; int main(){
cin>>n>>m>>r>>k;
Node s;
s.x=r;s.y=r;
s.e=calc(s.x,s.y);
pq.push(s); while(pq.size() && k){
Node c=pq.top();pq.pop();
ll x=c.x,y=c.y;
if(vis[make_pair(x,y)]==)continue;
vis[make_pair(x,y)]=;
k--;ans+=c.e; for(int i=;i<;i++){
ll dx=x+a[i],dy=y+b[i];
if(dx< || dy< || dx>n || dy>m)continue;
Node t;
t.x=dx,t.y=dy;
t.e=calc(dx,dy);
pq.push(t);
}
} printf("%.10lf\n",ans);
}
cf452C——组合数学概率推导
一副牌n张牌,把m副牌混在一起,再抽出n张,有放回地抽取两张,问一样的概率
当只有一副牌时,抽到和原来一样的概率是1/n
当有m副牌时,分成两部分考虑
第一部分:第二次抽的是第一次抽的那张牌,概率是1/n
第二部分,第二次抽的不是第一次抽的那张牌,但是和第一次抽的相同,概率是(n-1)/n*(n-1)/(n*m-1)
为什么要分阶段考虑:因为两次洗牌时的洗牌范围不同,所以需要对每个范围求一次概率
先在n*m张牌里取一张牌,然后放到范围n里洗牌,那么下一次还取到这张牌的概率是1/n,不取到这张牌的概率是(n-1)/n
从其他n-1张牌里取出和这张牌相同的概率是(n-1)/(n*m-1)
#include<bits/stdc++.h>
using namespace std; int main()
{
double n,m;
cin>>n>>m;
if (n==&&m==){printf("1\n");return ;}
double a=1.0/n;
double b=(n-)*(m-)/n/(n*m-);
printf("%.7lf\n",a+b); }
cf261b ——组合数学+dp,期望=总量/总方案数
- 给定一个序列ai表示第i个人的体积,现在这n个人随机排列,依次进入体积为n的房间里,问房间里人数的期望
- 原问题转化成 总方案数/全排列
- 假定第一个无法进入的人是x,那么进入餐厅的人体积可以是区间[p-a[x]+1,p]
- 令dp[i,j,k]表示前i个人,进了j个,体积是k的方案数
- dp[0][0][0]=1,
- dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j-1][k-a[i]]
- 最后要求的是每个 j*j!*(n-j-1)!*dp[n][j][p-a[x]+1,p],即j*进入j个人的方案数,然后求和就是总方案数
#include<bits/stdc++.h>
using namespace std;
#define N 55
int n,a[N],p;
double dp[N][N][N],F[N]; int main(){
F[]=;
for(int i=;i<=;i++)F[i]=1.0*i*F[i-]; cin>>n;int sum=;
for(int i=;i<=n;i++)
cin>>a[i],sum+=a[i];
cin>>p;
if(sum<=p){cout<<n<<endl;return ;} double ans=;
for(int x=;x<=n;x++){
memset(dp,,sizeof dp);
dp[][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
for(int k=;k<=p;k++){
if(x==i){dp[i][j][k]=dp[i-][j][k];continue;}
dp[i][j][k]=dp[i-][j][k];
if(j && k>=a[i])dp[i][j][k]+=dp[i-][j-][k-a[i]];
}
for(int j=;j<n;j++)
for(int k=max(,p-a[x]+);k<=p;k++)
ans+=F[j]*F[n-j-]*j*dp[n][j][k];
}
printf("%.10lf\n",ans/F[n]);
}
cf期望概率专题的更多相关文章
- HDU 3853 期望概率DP
期望概率DP简单题 从[1,1]点走到[r,c]点,每走一步的代价为2 给出每一个点走相邻位置的概率,共3中方向,不动: [x,y]->[x][y]=p[x][y][0] , 右移:[x][y ...
- 【BZOJ 3652】大新闻 数位dp+期望概率dp
并不难,只是和期望概率dp结合了一下.稍作推断就可以发现加密与不加密是两个互相独立的问题,这个时候我们分开算就好了.对于加密,我们按位统计和就好了;对于不加密,我们先假设所有数都找到了他能找到的最好的 ...
- 【BZOJ 3811】玛里苟斯 大力观察+期望概率dp+线性基
大力观察:I.从输出精准位数的约束来观察,一定会有猫腻,然后仔细想一想,就会发现输出的时候小数点后面不是.5就是没有 II.从最后答案小于2^63可以看出当k大于等于3的时候就可以直接搜索了 期望概率 ...
- 【BZOJ 3925】[Zjoi2015]地震后的幻想乡 期望概率dp+状态压缩+图论知识+组合数学
神™题........ 这道题的提示......(用本苣蒻并不会的积分积出来的)并没有 没有什么卵用 ,所以你发现没有那个东西并不会 不影响你做题 ,然后你就可以推断出来你要求的是我们最晚挑到第几大的 ...
- 【NOIP模拟赛】黑红树 期望概率dp
这是一道比较水的期望概率dp但是考场想歪了.......我们可以发现奇数一定是不能掉下来的,因为若奇数掉下来那么上一次偶数一定不会好好待着,那么我们考虑,一个点掉下来一定是有h/2-1个红(黑),h/ ...
- BZOJ2337: [HNOI2011]XOR和路径 期望概率dp 高斯
这个题让我认识到我以往对于图上期望概率的认识是不完整的,我之前只知道正着退还硬生生的AC做过的所有图,那么现在让我来说一下逆退,一般来说对于概率性的东西都只是正推,因为有了他爸爸才有了他,而对于期望性 ...
- BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp
首先这道题让我回忆了一下最短路算法,所以我在此做一个总结: 带权: Floyed:O(n3) SPFA:O(n+m),这是平均复杂度实际上为O(玄学) Dijkstra:O(n+2m),堆优化以后 因 ...
- 期望概率DP
期望概率DP 1419: Red is good Description 桌面上有\(R\)张红牌和\(B\)张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付 ...
- 【BZOJ 3451】Tyvj1953 Normal 思维题+期望概率+FFT+点分治
我感觉是很强的一道题……即使我在刷专题,即使我知道这题是fft+点分治,我仍然做不出来……可能是知道是fft+点分治限制了我的思路???(别做梦了,再怎样也想不出来的……)我做这道题的话,一看就想单独 ...
随机推荐
- Delphi DBGrid 实现复选框
1 在数据库对应的表中加入 bit 列验证是否被选中 然后dbgrid第一列的filedname是bit列 在DBgrid的onDrawColumnCell事件中写: procedure DBGri ...
- element-ui 复选框,实现点击表格当前行选中或取消
背景: 1.表格结构绑定事件 <el-table v-loading="StepsListLoading" :data="StepsListData" b ...
- 经典的MySQL Duplicate entry报错注入
SQL注射取数据的方式有多种: 利用union select查询直接在页面上返回数据,这种最为常见,一个前提是攻击者能够构造闭合的查询. Oracle中利用监听UTL_HTTP.request发起的H ...
- JS 常用字符串,数组操作
JavaScript String/Array对象 JS String对象 String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 pro ...
- 使用 twine 上传自己的 python 包到 pypi
打包检查 python setup.py check 打包 python3 setup.py sdist build 上传 twine upload dist/* twine 安装: pip inst ...
- Java核心基础知识(一):概念、语法、使用、源码
1. Java中OOP的特点? OOP(Object Oriented Programming):面向对象编程.具有封装.继承.多态三大特征. 封装:解决数据安全性问题: 继承:解决代码的重用性问题: ...
- npm yarn bower (前端必会的工具)
https://qunitjs.com/ https://www.cnblogs.com/shytong/p/5417789.html
- 一,Jetty启动
一,Jetty安装 从官网download.eclipse.org/jetty/ 下载需要的版本,在指定目录解压即可,下面用$JETTY_HOME表示Jetty的解压目录,也就是安装目录.我用的版本是 ...
- leetcode.矩阵.566重塑矩阵-Java
1. 具体题目 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数.重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充.如果具有给定参数的reshape操 ...
- python之路——操作系统的发展史
阅读目录 手工操作 —— 穿孔卡片 批处理 —— 磁带存储和批处理系统 多道程序系统 分时系统 实时系统 通用操作系统 操作系统的进一步发展 操作系统的作用 手工操作 —— 穿孔卡片 1946年第一台 ...