NC254199. 小红的俄罗斯方块
描述
输入描述
第一行输入方块的数量 。
接下来的 行,每行输入两个正整数 和 ,分别代表方块旋转的角度以及从哪一列下落的。方块是顺序下落的,也就是说前一个方块落到底之前,后一个方块不会开始下落。
一定是 0、90、180、270四个中的一个, 代表方块的左端那一列,保证右端不会超过8。也就是说,若 为0或180,;若为 90或270,
输出描述
输出 8 个正整数,分别代表最终8列的高度。
示例1
输入:
3 0 1 90 2 180 4
输出:
3 3 3 4 4 0 0 0
说明:
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 524K, 提交时间: 2023-07-11 14:04:15
#include<iostream> using namespace std; int h[8], n; int main(){ cin >> n; for(int i = 1; i <= n; ++i){ int a, b; cin >> a >> b; if(a == 0){ int t = max(h[b]+1, h[b+1]+1); h[b] = t+2; h[b+1] = t; } else if(a == 90){ int t = max(h[b] + 2, max(h[b+1]+1, h[b+2]+1)); h[b] = t; h[b+1] = t; h[b+2] = t; } else if(a == 180){ int t = max(h[b]+1, h[b+1]+3); h[b] = t; h[b+1] = t; } else if(a == 270){ int t = max(h[b] + 1, max(h[b+1]+1, h[b+2]+1)); h[b] = t; h[b+1] = t; h[b+2] = t+1; } } for(int i = 1; i <= 8; ++i){ cout << h[i] << " "; } return 0; }
pypy3 解法, 执行用时: 71ms, 内存消耗: 21216K, 提交时间: 2023-07-09 19:17:00
import sys input = sys.stdin.readline n = int(input()) h = [0]*8 for _ in range(n): typ, i = map(int, input().split()) i -= 1 if typ == 0: m = max(h[i], h[i+1]) h[i] = m+3 h[i+1] = m+1 elif typ == 270: m = max(h[i], h[i+1], h[i+2]) h[i], h[i+1], h[i+2] = m+1, m+1, m+2 elif typ == 90: m = max(h[i]+2, h[i+1]+1, h[i+2]+1) h[i], h[i+1], h[i+2] = m, m, m elif typ == 180: m = max(h[i]+1, h[i+1]+3) h[i], h[i+1] = m, m print(*h)
C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 460K, 提交时间: 2023-07-10 11:29:23
#include<bits/stdc++.h> using namespace std; int main() { int n,q[9]={0}; cin>>n; while(n--) { int a,b; cin>>a>>b; if(a==0) q[b]=max(q[b],q[b+1])+3,q[b+1]=q[b]-2; else if(a==90) q[b]=max(q[b]+1,max(q[b+1],q[b+2]))+1,q[b+1]=q[b],q[b+2]=q[b]; else if(a==180) q[b+1]=max(q[b],q[b+1]+2)+1,q[b]=q[b+1]; else q[b+2]=max(q[b],max(q[b+1],q[b+2]))+2,q[b]=q[b+2]-1,q[b+1]=q[b+2]-1; } for(int i=1;i<=8;i++) cout<<q[i]<<" "; return 0; }
Python3 解法, 执行用时: 41ms, 内存消耗: 4596K, 提交时间: 2023-07-09 20:13:15
l=[0]*11 for _ in range(int(input())): a,b=map(int,input().split()) c,d,e=l[b:b+3] if a==0: x=max(c,d) l[b]=x+3 l[b+1]=x+1 elif a==90: x=max(c+1,d,e) l[b]=l[b+1]=l[b+2]=x+1 elif a==180: x=max(c+1,d+3) l[b]=l[b+1]=x else: x=max(c,d,e)+1 l[b]=l[b+1]=x l[b+2]=x+1 print(*l[1:9])