题意:
有几种俄罗斯方块,把它们放在c列的平台之间,给出每一列的高度,还有方块的种类,求出这俄罗斯方块能放出多少中方案数,(方块的每一个底面都要贴到平台上),例
,这种方块最多有5中方法。
思路:
这题很简单,就是根据每一列的高度做出相应的判断就好了。
代码:
#include<cstdio>
#include<cstring>
int n,p,a[101],ans;
int main()
{
memset(a,0x7f,sizeof(a));
scanf("%d%d",&n,&p);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
if (p==1)//判断就好了,不是很难,应该能看懂
{
ans+=n;
for (int i=1;i<=n-3;i++)
if (a[i]==a[i+1]&&a[i+1]==a[i+2]&&a[i+2]==a[i+3]) ans++;
}
else
if (p==2)
{
for (int i=1;i<=n-1;i++)
if (a[i]==a[i+1]) ans++;
}
else
if (p==3)
{
for (int i=1;i<=n;i++)
{
if (a[i]==a[i+1]&&a[i+2]-a[i]==1) ans++;
if (a[i]-a[i+1]==1) ans++;
}
}
else
if (p==4)
{
for (int i=1;i<=n;i++)
{
if (a[i]-a[i+1]==1&&a[i+1]==a[i+2]) ans++;
if (a[i+1]-a[i]==1) ans++;
}
}
else
if (p==5)
{
for (int i=1;i<=n;i++)
{
if (a[i]==a[i+1]&&a[i+1]==a[i+2]) ans++;
if (a[i]-a[i+1]==1&&a[i+2]-a[i+1]==1) ans++;
if (a[i+1]-a[i]==1) ans++;
if (a[i]-a[i+1]==1) ans++;
}
}
else
if (p==6)
{
for (int i=1;i<=n;i++)
{
if (a[i]==a[i+1]&&a[i+1]==a[i+2]) ans++;
if (a[i]==a[i+1]) ans++;
if (a[i+1]==a[i+2]&&a[i+1]-a[i]==1) ans++;
if (a[i]-a[i+1]==2) ans++;
}
}
else
if (p==7)
{
for (int i=1;i<=n;i++)
{
if (a[i]==a[i+1]&&a[i+1]==a[i+2]) ans++;
if (a[i]==a[i+1]) ans++;
if (a[i+1]-a[i]==2) ans++;
if (a[i]==a[i+1]&&a[i]-a[i+2]==1) ans++;
}
}
printf("%d",ans);
}
本文介绍了一种针对俄罗斯方块放置方案数目的算法实现。通过分析每列平台高度及方块类型,该算法能够计算出所有可能的放置方案数量。文章提供了详细的代码示例,覆盖了7种不同类型的方块放置逻辑。
225

被折叠的 条评论
为什么被折叠?



