题意:

n个罐子,每个罐子印了几行字,一行以#为界,最长的的一行记为w,每个罐子是高为6,宽为w的矩形+外面一圈#。按输入顺序将罐子叠放起来,规则为:罐子A(宽度w)只能放在宽度比它大的其他罐子上。从左往右遍历栈,如果当前最高栈罐子的宽度大于w,该罐子叠放到这一栈上。如果找不到这种栈,在最右边开辟一个新栈。另外,每个罐子叠放的位置和字的位置尽可能居中对齐,若不能,可以偏左或偏上一格。

最后让你输出罐子叠放的图。图最大为80*60


题解:

没什么好说的,模拟就完事了 。

mp[][]最后存放的图;w[]每个罐子的宽度;ve[]每个罐子上的字;ans[i]第i栈上存放的罐子id;st[i]第i栈目前最高的罐子的宽度;

h,d是每个罐子的上下界,l,r是每个罐子的左右阶,left是当前列的左边界。

kai是居中处理过后开始的行位置,o是居中处理过后的没一行字开始的列位置。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=10050;
vector<string>ve[105];
vector<int>ans[105];
int w[105],st[maxn];
char s[maxn];
char mp[1005][105];
int main()
{int n,t,ka=0;scanf("%d",&t);while(t--){scanf("%d",&n);getchar();for(int i=1;i<=n;i++){ve[i].clear();gets(s+1);int len=strlen(s+1);string ss="";w[i]=0;for(int j=1;j<=len;j++){if(s[j]=='#'){ve[i].push_back(ss);int tmp=ss.length();w[i]=max(w[i],tmp);ss="";}else ss+=s[j];}ve[i].push_back(ss);int tmp=ss.length();w[i]=max(w[i],tmp);//printf("w[%d]:%d\n",i,w[i]);}printf("Can Stack #%d:\n",++ka);for(int i=1;i<=6;i++){for(int j=1;j<10;j++){printf(" ");}printf("%d",i);}printf("\n");for(int i=1;i<=6;i++){for(int j=1;j<=10;j++){printf("%d",j%10);}}printf("\n");int now=0,mx=0;for(int i=1;i<=n;i++){int flag=0;for(int j=1;j<=now;j++){if(st[j]>w[i]){flag=1;ans[j].push_back(i);st[j]=w[i];break;}}if(!flag){now++;ans[now].clear();ans[now].push_back(i);st[now]=w[i];}}for(int i=1;i<=now;i++){mx=max(mx,(int)ans[i].size());}mx=mx*8;for(int i=1;i<=mx;i++)for(int j=1;j<=60;j++) mp[i][j]=' ';int left=1;for(int k=1;k<=now;k++){int l=left,r=left+w[ans[k][0]]+1;int h=0,d=-7;//for(int i=l;i<=r;i++) mp[h][i]=mp[d][i]='#';//for(int i=h;i>=d;i--) mp[i][l]=mp[i][r]='#';int y=ans[k].size();int rr=r;//if(y>1){for(int i=0;i<y;i++){int f=((r-l+1)%2)^((w[ans[k][i]])%2);int xiao=(r-l+1-w[ans[k][i]]-2)/2;//printf("!%d\n",xiao);if(f){l+=xiao;r-=xiao;r--;}else{l+=xiao;r-=xiao;}h+=8;d+=8;int id=ans[k][i];int hi=ve[id].size(),kai;if(hi%2){kai=h-(7-hi)/2;}else{kai=h-(8-hi)/2;}for(int j=0;j<hi;j++){int o=l+1;int tp=ve[id][j].size();int ff=((r-l+1)%2)^(tp%2);if(ff){o+=(r-l-2-tp)/2;}else o+=(r-l-1-tp)/2;for(int p=0;p<ve[id][j].size();p++){mp[kai][p+o]=ve[id][j][p];}kai--;}//printf("!%d\n",l,r,h,d);for(int j=l;j<=r;j++) mp[h][j]=mp[d][j]='#';for(int j=h;j>=d;j--) mp[j][l]=mp[j][r]='#';}//}left=rr+2;}for(int i=mx;i>=1;i--){for(int j=1;j<=60;j++){printf("%c",mp[i][j]);}printf("\n");}printf("\n");}return 0;
}

UCF Local Programming Contest 2012(Practice)E. Pete's Pantry 【模拟】相关推荐

  1. 【画画】UCF Local Programming Contest 2012(Practice)E. Pete's Pantry

    题目链接https://www.jisuanke.com/contest/7332 纯粹的画画题(可光题意就理解了一年) 此生再也不愿意做这种题(流泪) #include<bits/stdc++ ...

  2. UCF Local Programming Contest Round 1A记录

    A. Briefcases Full of Money 题目描述 输入描述: 输出描述: 示例1 输入 84 111 2 3 2 3 输出 5 示例2 输入 200 3 20 5 4 1 输出 50 ...

  3. UCF Local Programming Contest 2016 计蒜客解(补)题报告

    A - Majestic 10(签到) 题目链接 #include <iostream> using namespace std;int main() {int t,x,y,z;scanf ...

  4. 【水一波题解】题解 of University of Central Florida 2020 (Fall) “Practice” Local Programming Contest

    题解 of University of Central Florida 2020 (Fall) "Practice" Local Programming Contest [by_0 ...

  5. Stanford Local Programming Contest 2011

    这几天把SLPC2011的题目做一下 这里是题目连接:SLPC2011 A.Another Rock-Paper-Scissors Problem 题目大意:给出Sonny在每一局出石头剪刀布的规则( ...

  6. (趋势)The 2002 Trend Micro Programming Contest, Preliminary

    The 2002 Trend Micro Programming Contest, Preliminary 蕷B氡呂?  蘥?╂賓Y?   Good Neighbors a???6摕   圓2d:&a ...

  7. freee Programming Contest 2022(AtCoder Beginner Contest 264)A~D题详细讲解

    目录 博主赛情 网站链接 比赛简介 Contest Information Reason why freee needs AtCoder users freee's business content ...

  8. 2018-2019 ACM-ICPC Brazil Subregional Programming Contest 题解

    2018-2019 ACM-ICPC Brazil Subregional Programming Contest 题解 比赛链接:2018-2019 ACM-ICPC Brazil Subregio ...

  9. 2015 HIAST Collegiate Programming Contest J

    Polygons Intersection 题意:给2个凸多边形,求相交面积 思路:不会,套板子就是了 AC代码: #include "iostream" #include &qu ...

最新文章

  1. Excel 经纬度度分秒转化为小数格式
  2. Java日志体系总结
  3. VC++在两个按钮之间连直线和折线
  4. JavaScript程序开发(十五)—函数的属性和方法
  5. uoj#348/洛谷P4221 [WC2018]州区划分(FWT)
  6. Altium Designer敷铜的规则设定
  7. [转]Linux之ACL权限
  8. jquery 查找表格里的input_jquery获取input表单值的代码
  9. Android基础 --- Widget
  10. 非标自动化企业前十名_自动化输送+旋盖,竟如此简单!机械设计教程精选!...
  11. 转https_PDF怎么转成JPG最简单?分享免费的PDF转图片方法
  12. 用ILDasm.exe深入理解委托
  13. 百度云apkg手机文件怎么打开_下载不限速,这款网盘软件,轻松秒杀百度云!...
  14. Java项目:在线bbs论坛系统(java+SSM+JSP+bootstrap+jQuery+mysql)
  15. Python: 进行one-hot编码
  16. 五个方向告诉你如何运营好一个公众号!
  17. stm32及LPC1768库函数串口输出重定向
  18. Spring 你让我伤透了个心啊!
  19. 推荐几本这个系列封面的编程书,涉及Python、计算机图形学、Linux
  20. Discuz!教程之门户列表页文章中无图片时,从图库中选择一张作为封面

热门文章

  1. XILINX 7系列FPGA_Slice_存储器_XADC篇
  2. 【鬼畜】UVA - 401每日一题·猛男就是要暴力打表
  3. 卷积神经网络中Attention注意力机制(CBAM)
  4. 创业项目怎么获得专业的投融资服务?
  5. python使用ffmpeg提取mkv视频的字幕srt
  6. 汇编语言----处理机控制指令及伪指令
  7. ES修改mapping中的字段名称
  8. Jmeter 压测分析
  9. 白杨SEO:谈谈我理解的营销,企业营销怎样做?
  10. bzoj3083 遥远的国度 bzoj3626 LCA (树链剖分)