我是靠谱客的博主 快乐人生,最近开发中收集的这篇文章主要介绍俄罗斯方块,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

声明:如需转载本文,请附上本文链接:https://blog.csdn.net/llh200804/article/details/121190370

俄罗斯方块
时间限制:1秒 内存限制:128M

题目描述

首先把经典的俄罗斯方块游戏简化一下:方块有顺序的从屏幕顶端掉下至底部,当碰到障碍物或底部时将停下,同时变成新的障碍物。游戏规则规定,只能在方块下落停止前决定下落时的横向位置,使这个方块变成障碍物后的高度最低,且如果有几种横向位置使这个方块变成障碍物后的高度最低时,取最左边的横向位置下落

输入描述
第一行有两个整数,表示方块数n和屏幕宽度w,之间用一个空格分隔
第2~i+1行,每行一个整数,为第i个方块的边长a

输出描述
输出一个整数,表示最后障碍物的最高点高度

样例
输入
3 5
2
1
3

输出
4

提示
对于100%的数据满足:1<=w<=20,1<=a<=w,1<=n<=100

首先,先看题目,题目说的使这个方块变成障碍物后的高度最低时,取最左边的横向位置下落。那么问题就好说了,看输入样例2,1,3是方块的边长,那么,这其实是模拟的题目。只需要按照题目模拟就行了。
话不多说,直接上代码

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N = 2010;
const int INF = 0x3f3f3f3f;
int h[N];
int main(){
int n,w,a,maxx=0;
cin>>n>>w;
mem(h,0);
for(int i=0;i<n;i++){
cin>>a;
int minn=9999,mi;
for(int j=0;j<w-a+1;j++){
int max=0;
for(int k=j;k<=j+a-1;k++){
if(h[k]>max){
max=h[k];
}
}
if(max<minn){
minn=max;
mi=j;
}
}
for(int j=mi;j<=mi+a-1;j++){
h[j]=minn+a;
}
}
for(int i=0;i<w;i++){
maxx=max(h[i],maxx);
}
cout<<maxx;
}

喜欢的小伙伴,可以点赞收藏或打赏哦

最后

以上就是快乐人生为你收集整理的俄罗斯方块的全部内容,希望文章能够帮你解决俄罗斯方块所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部