NOIP2008 立体图 Codevs 1149 Tyvj 1009
来源:互联网 发布:酷狗音乐数据异常 编辑:程序博客网 时间:2024/05/24 00:53
这题是普及组的题…………但是 ………… 毕竟模拟硬伤
我的想法是这样的: 读入矩阵之后,从左上角开始填,原则是从上往下,从左往右,,从前往后,对图进行填充,从上往下填就不能从1开始,因为会造成RE访问非法内存的情况,建完会有一些地方重合或者多出来,就需要加一个合并操作。至于‘.’的情况,我是写了个函数,传的坐标是立方体的前视图的左上角坐标,然后暴力处理vis数组,最后暴力处理‘.’和起止点。模拟不是考复杂度……不讨论复杂度。。。。。。
琳琳飒飒两百行,做完的时候也没空压代码了,抽空再打一遍的时候可以压代码试试。
我的程序TYVJ数据可以过,TYVJ评测机抽了但是数据还是有的,codevs数据过不去 不知原因……方法很暴力。
还有 我写了几个没用的函数,是合并别的情况的,这里是写着很爽就写了~
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int size = 200;int num[55][55];char ans[size][size];int abs(int x){ if(x < 0) return -x; return x;}bool vis[size][size];int cnt;struct point{int x,y;}poi[2510];void build(int x,int y){ ans[x][y] = ans[x][y+4] = '+'; ans[x][y+1] = ans[x][y+2] = ans[x][y+3] = '-'; ans[x+3][y] = ans[x+3][y+4] = '+'; ans[x+3][y+1] = ans[x+3][y+2] = ans[x+3][y+3] = '-'; ans[x+1][y] = ans[x+2][y] = ans[x+1][y+4] = ans[x+2][y+4] = '|'; ans[x-1][y+1] = ans[x-1][y+5] = '/'; ans[x-2][y+2] = ans[x-2][y+6] = '+'; ans[x-2][y+3] = ans[x-2][y+4] = ans[x-2][y+5] = '-'; ans[x+2][y+5] = '/'; ans[x+1][y+6] = '+'; ans[x][y+6] = ans[x-1][y+6] = '|'; vis[x][y+6] = vis[x-1][y+6] = 1; vis[x][y] = vis[x][y+4] = 1; vis[x][y+1] = vis[x][y+2] = vis[x][y+3] = 1; vis[x+3][y] = vis[x+3][y+4] = 1; vis[x+3][y+1] = vis[x+3][y+2] = vis[x+3][y+3] = 1; vis[x+1][y] = vis[x+2][y] = vis[x+1][y+4] = vis[x+2][y+4] = 1; vis[x-1][y+1] = vis[x-1][y+5] = 1; vis[x-2][y+2] = vis[x-2][y+6] = 1; vis[x-2][y+3] = vis[x-2][y+4] = vis[x-2][y+5] = 1; vis[x+2][y+5] = 1; vis[x+1][y+6] = 1; vis[x][y+6] = vis[x-1][y+6] = 1; vis[x-1][y+2] = vis[x-1][y+3] = vis[x-1][y+4] = 1; vis[x+1][y+1] = vis[x+2][y+1] = vis[x+2][y+2] = vis[x+1][y+2] = vis[x+1][y+3] = vis[x+2][y+3] = 1; vis[x][y+5] = vis[x+1][y+5] = 1;}void merge1(int x1,int y1,int x2,int y2)//前后 x1下 { ans[x1+1][y1+1] = ans[x1+2][y1+1] = ans[x1+2][y1+2] = ans[x1+1][y1+2] = ans[x1+1][y1+3] = ans[x1+2][y1+3] = ' '; ans[x1-1][y1+2] = ans[x1-1][y1+3] = ans[x1-1][y1+4] = ' '; ans[x2-1][y2+2] = ans[x2-1][y2+3] = ans[x2-1][y2+4] = ' '; ans[x2][y2+5] = ans[x2+1][y2+5] = ans[x1][y1+5] = ans[x1+1][y1+5] = ' ';}void merge2(int x1,int y1,int x2,int y2)//上下,x1下 { ans[x1+1][y1+1] = ans[x1+2][y1+1] = ans[x1+2][y1+2] = ans[x1+1][y1+2] = ans[x1+1][y1+3] = ans[x1+2][y1+3] = ' '; ans[x1][y1+5] = ans[x1+1][y1+5] = ' '; ans[x2+1][y2+1] = ans[x2+2][y2+1] = ans[x2+2][y2+2] = ans[x2+1][y2+2] = ans[x2+1][y2+3] = ans[x2+2][y2+3] = ' '; ans[x2][y2+5] = ans[x2+1][y2+5] = ' '; ans[x2-1][y2+2] = ans[x2-1][y2+3] = ans[x2-1][y2+4] = ' ';}void merge3(int x1,int y1,int x2,int y2)//横向 x1为 ← { ans[x1+1][y1+1] = ans[x1+2][y1+1] = ans[x1+2][y1+2] = ans[x1+1][y1+2] = ans[x1+1][y1+3] = ans[x1+2][y1+3] = ' '; ans[x1-1][y1+2] = ans[x1-1][y1+3] = ans[x1-1][y1+4] = ' '; ans[x2+1][y2+1] = ans[x2+2][y2+1] = ans[x2+2][y2+2] = ans[x2+1][y2+2] = ans[x2+1][y2+3] = ans[x2+2][y2+3] = ' '; ans[x2-1][y2+2] = ans[x2-1][y2+3] = ans[x2-1][y2+4] = ' '; ans[x2][y2+1] = ans[x2+1][y2+1] = ' ';}int main(){//从下往上 从前往后 从左往右 /* build(5,5); /*build(5,9); merge3(5,5,5,9); for(int i = 1;i <= 15;i ++) { for(int j = 1;j <= 15;j ++) { cout<<ans[i][j]; } cout<<endl; }*/ int n,m; scanf("%d%d",&n,&m); for(int i = 1;i <= n;i ++) for(int j = 1;j <= m;j ++) { scanf("%d",&num[i][j]); } for(int i = 1;i <= m;i ++) //i是列,j是行 { int xs = 100; int ys = 100 + (i-1) * 4; for(int j = 1;j <= n;j ++) { if(j != 1) ys -= 2; if(j != 1) xs += 2; int lastx,lasty; int build_start_x = 0; int build_start_y = 0; for(int v = 1;v <= num[j][i];v ++) { lastx = build_start_x,lasty = build_start_y; build_start_x = xs - (v-1)*3; build_start_y = ys;// poi[++cnt].x = build_start_x,poi[++cnt].y = build_start_y; build(build_start_x,build_start_y);// if(lastx != 0 && lasty != 0)// { merge2(lastx,lasty,build_start_x,build_start_y);// } } } } for(int i = 1;i <= 200;i ++) { for(int j = 1;j <= 200;j ++) { if(vis[i][j] == 0) { ans[i][j] = '.'; } } } int stax,stay,endx,endy; for(int i = 1;i <= 200;i ++) { bool flag = 0; for(int j = 1;j <= 200;j ++) { if(ans[i][j] != '.') {flag = 1; break;} } if(flag == 1) { stax = i; break; } } for(int j = 1;j <= 200;j ++) { bool flag = 0; for(int i = 1;i <= 200;i ++) { if(ans[i][j] != '.') {flag = 1; break;} } if(flag == 1) { stay = j; break; } } for(int i = 200;i >= 1;i --) { bool flag = 0; for(int j = 200;j >= 1;j --) { if(ans[i][j] != '.') {flag = 1; break;} } if(flag == 1) { endx = i; break; } } for(int i = 200;i >= 1;i --) { bool flag = 0; for(int j = 200;j >= 1;j --) { if(ans[j][i] != '.') {flag = 1; break;} } if(flag == 1) { endy = i; break; } } for(int i = stax;i <= endx;i ++) { for(int j = stay;j <= endy;j ++) { cout<<ans[i][j]; } cout<<endl; } return 0;}//这真TM是普及组的题?//graph
0 0
- NOIP2008 立体图 Codevs 1149 Tyvj 1009
- 【codevs 1149】立体图
- CODEVS 1149 立体图
- NOIP2008普及组 立体图
- [NOIP2008]立体图 T4
- 【noip2008】【普及组】立体图
- [NOIP2008] 立体图-解题报告
- noip2008 立体图 (字符串+模拟)
- NOIP2008(普及组)T4 立体图
- 【模拟 集合】[NOIP2008普及组]立体图 tyvj1009
- |Tyvj|NOIP2008|模拟|P1006 isbn
- |Tyvj|NOIP2008|贪心|P1007 排座椅
- |Tyvj|NOIP2008|动态规划|P1011 传纸条
- 立体图
- 立体图
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
- NOIP2008
- 洛谷 P1352 TYVJ P1052 CODEVS 1380 没有上司的舞会
- CSU 1507 超大型LED显示屏
- log4j写日志到特定文件夹
- Android 时间格式化符号HH无法识别
- Android常见的几个控件(TextView,EditText,Button)
- 静态数据的内存图
- NOIP2008 立体图 Codevs 1149 Tyvj 1009
- jQuery改变label/input的值,改变class,改变img的src
- jquery getjson方法在ie下失效的问题
- C 头文件之<ctpye.h>
- 安卓mapbox实现收藏地点功能
- 【Android】网络通讯
- CSU 1511 残缺的棋盘
- 程序员的生活充满压力,但你不能放弃!
- 前向声明 前置声明 Forward Declare