【uva-196】Spreadsheet (拓扑排序)妈呀居然过了
2017-11-08 00:44
597 查看
题目大意:
表格位置:列是字母,行是数字。
一些位置是值一些位置是关系式,关系只有+,这就简单很多了但我还是写了很多很多。
最后要求输出计算所有关系式之后的全是值的表格。
思路:
拓扑排序。
利用两个坐标之间的偏序关系。
唉本死宅情绪低落的时候是找不到可以寻求安慰的事和人的。
就写代码吧但是代码也写的特别慢。唉,本来就比较愚蠢吧。
希望快点走出这种辣鸡糟糕的情绪看破红尘。
人生真是艰难。
丧到极点写了快一百五十行。。。
表格位置:列是字母,行是数字。
一些位置是值一些位置是关系式,关系只有+,这就简单很多了但我还是写了很多很多。
最后要求输出计算所有关系式之后的全是值的表格。
思路:
拓扑排序。
利用两个坐标之间的偏序关系。
唉本死宅情绪低落的时候是找不到可以寻求安慰的事和人的。
就写代码吧但是代码也写的特别慢。唉,本来就比较愚蠢吧。
希望快点走出这种辣鸡糟糕的情绪看破红尘。
人生真是艰难。
丧到极点写了快一百五十行。。。
/* 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); 4000 ok[next]=true; } sheet[a][b]+=sheet[next.x][next.y]; } }
相关文章推荐
- uva 196 Spreadsheet 拓扑排序 。坑爹的一题
- UVA196-Spreadsheet(拓扑排序)
- uva 196 - Spreadsheet
- UVA - 196 Spreadsheet
- uva196 Spreadsheet
- uva 196 Spreadsheet
- UVA 196 Spreadsheet
- UVA 196 - Spreadsheet
- uva 196 - Spreadsheet
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- UVA_196_Spreadsheet
- uva 196 - Spreadsheet
- UVa 196 Spreadsheet
- uva196 - Spreadsheet(电子表格)
- UVa 196 Spreadsheet
- uva 196 Spreadsheet(拓扑排序+DFS)
- uva 196 Spreadsheet(电子表格)
- UVA 196 Spreadsheet 解题报告
- UVa 196 - Spreadsheet
- Uva - 512 - Spreadsheet Tracking