题意:
有几种俄罗斯方块,把它们放在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);
}