【uva-196】Spreadsheet (拓扑排序)妈呀居然过了
来源:互联网 发布:js日期转换为数字 编辑:程序博客网 时间:2024/04/28 17:43
题目大意:
表格位置:列是字母,行是数字。
一些位置是值一些位置是关系式,关系只有+,这就简单很多了但我还是写了很多很多。
最后要求输出计算所有关系式之后的全是值的表格。
思路:
拓扑排序。
利用两个坐标之间的偏序关系。
唉本死宅情绪低落的时候是找不到可以寻求安慰的事和人的。
就写代码吧但是代码也写的特别慢。唉,本来就比较愚蠢吧。
希望快点走出这种辣鸡糟糕的情绪看破红尘。
人生真是艰难。
丧到极点写了快一百五十行。。。
/* uva 196 by zhuhua Time limit: 3000 ms AC Time: 80 ms*/#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <vector>#include <map>using namespace std;struct pos{ int x,y; pos(int xx=0,int yy=0){x=xx;y=yy;} bool operator<(const pos b) const { if(x!=b.x) return x < b.x; return y < b.y; }};const int LEN=20000;int n,m;int sheet[1100][LEN];map < pos,vector<pos> >order;int ordersiz;map < pos,bool> ok;void translate(int a,int b,string ind);void dfs(pos now);int main(){ int t; string input,temp,index; int i,j,k,num; scanf("%d",&t); while(t--) { scanf(" %d %d",&n,&m); getchar(); memset(sheet,0,sizeof(sheet)); order.erase(order.begin(),order.end()); ordersiz=0; ok.erase(ok.begin(),ok.end()); for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { cin>>input; if(input[0]=='=') { for(k=1,index="";k<input.length();k++) { if(input[k]=='+') { translate(i,j,index); index.clear(); } else index+=input[k]; } translate(i,j,index); ok[pos(i,j)]=false; } else { num=0; k=0; bool fu=false; if(input[0]=='-') {fu=true;++k;} for(;k<input.length();k++) num=num*10+input[k]-'0'; if(fu)num*=-1; sheet[i][j]=num; ok[pos(i,j)]=true; } } } map < pos,vector<pos> >::iterator it; for(it=order.begin();it!=order.end();it++) { pos now; now.x=it->first.x; now.y=it->first.y; if(!ok[now]) { dfs(now); ok[now]=true; } } for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(j-1)cout<<' '; cout<<sheet[i][j]; }cout<<endl; } } return 0;}void translate(int a,int b,string ind){ int i=0,xx=0,yy=0; int len=ind.length(); while(i<len&&ind[i]<='Z'&&ind[i]>='A') { yy=yy*26+(ind[i]-'A'+1); i++; } while(i<len) { xx=xx*10+(ind[i]-'0'); i++; } order[pos(a,b)].push_back(pos(xx,yy));}void dfs(pos now){ int a=now.x; int b=now.y; for(int i=0;i<order[now].size();i++) { pos next; next.x=order[now][i].x; next.y=order[now][i].y; if(!ok[next]) { dfs(next); ok[next]=true; } sheet[a][b]+=sheet[next.x][next.y]; }}
阅读全文
0 0
- 【uva-196】Spreadsheet (拓扑排序)妈呀居然过了
- uva 196 Spreadsheet(拓扑排序+DFS)
- Spreadsheet - UVa 196 拓扑排序
- uva 196 Spreadsheet 拓扑排序 。坑爹的一题
- HDU1659 Spreadsheet【拓扑排序】
- POJ1420 Spreadsheet(拓扑排序)注意的是超内存
- uva-11044居然水过。。。
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- UVA 196 Spreadsheet
- uva 196 - Spreadsheet
- UVa 196 - Spreadsheet
- uva 196 - Spreadsheet
- uva 196 Spreadsheet
- uva 196 - Spreadsheet
- UVa 196 Spreadsheet
- UVa 196 Spreadsheet
- uva 196 - Spreadsheet
- UVA - 196 Spreadsheet
- 用Java类任意读取一个文件,按照原文件格式,在控制台输出倒数五行
- java操作redis(三):实现一个redis连接池并附测试
- 分享一下最新的unity 2017.2 和 Vuforia 内置unity的下载包 以及 Vuforia core samples资源包
- 【SQL】SQL Server 2008管理工具
- C和指针之函数之把数字字符串转为整数并且返回这个数字(ascii_to_integer)
- 【uva-196】Spreadsheet (拓扑排序)妈呀居然过了
- 效果图第五课:第二部分
- python3爬虫笔记(一):了解HTTP协议
- eclipse中设置tomcat内存
- SpringMVC 请求转发区别
- Seaborn学习以及Matplotlib基础(持续更新中...)
- 自勉
- javaWeb之struts四---文件上传篇
- 二叉树