爱奇艺 秋招 测试开发工程师 笔试 1题AC+2题思路
第一题:
切割块,大意是x y z的立方体,切k刀,只能整点坐标切割
思路:平均切,一面一刀,开longlong
写的很繁琐 233333
#include<cstdio> #include<algorithm> using namespace std; int main() { int x,y,z; int k; int xx,yy,zz; long long ans; scanf("%d%d%d%d",&x,&y,&z,&k); xx=1;yy=1;zz=1; int step; step=1; for (int t=1;t<=k;t++) { if (xx==x && yy==y && zz==z) break; if (step==1) { if (xx<x) { xx++; step=2; } else if (yy<y) { yy++; step=3; } else if (zz<z) { zz++; step=1; } } else if (step==2) { if (yy<y) { yy++; step=3; } else if (zz<z) { zz++; step=1; } else if (xx<x) { xx++; step=2; } } else if (step==3) { if (zz<z) { zz++; step=1; } else if (xx<x) { xx++; step=2; } else if (yy<y) { yy++; step=3; } } } ans=xx*yy; ans=ans*zz; printf("%lld\n",ans); return 0; }
第二题不会
给定长度为N-1的01序列A,P为1~N的数列
求满足:A[i]=0时P[i]<P[i+1],A[i]=1时P[i]>P[i+1] 的P的排列的方案数
暴搜剪不剪枝都18%...直接输样例也18%,写到自闭,是我配不上爱奇艺!
然后我去问巨佬第二题思路了
f[i][j]表示我们处理到了第i位,第i位的数字,在接下来的m=(n-i+1)个数(包括第i个位置)中排第j的方案数
a[i]==0:此时有m-j个数可以放在下一个位置,可以更新的是f[i+1] [j ~ m-j] ,就是在j~m中找比当前j大的数来更新,这一段的数,要+=f[i][j]
a[i]==1:此时有j-1个数可以放在下一个位置,可以更新f[i+1][1 ~ j]
a[i]==0:此时有m-j个数可以放在下一个位置,可以更新的是f[i+1] [j ~ m-j] ,就是在j~m中找比当前j大的数来更新,这一段的数,要+=f[i][j]
a[i]==1:此时有j-1个数可以放在下一个位置,可以更新f[i+1][1 ~ j]