uva 196 Spreadsheet(电子表格)
2015-03-21 18:03
302 查看
题意:给出你一个表格,其中一些给出了确定的值,而另一部分只给出了一个表达式,现在要你求出整个表格。
分析:将表格中的每一个格子看成一个点,所给出的表达式就是边,建图后,按照拓扑排序的顺序计算,即可以得到整个表格的值。
刚开始被题目的数据吓到了,我想999*26*26*26=17558424这么多的元素,怎么都超内存了啊,后来看到别人博客上说只有1000*1000的元素,才开始做。。。
AC代码:
分析:将表格中的每一个格子看成一个点,所给出的表达式就是边,建图后,按照拓扑排序的顺序计算,即可以得到整个表格的值。
刚开始被题目的数据吓到了,我想999*26*26*26=17558424这么多的元素,怎么都超内存了啊,后来看到别人博客上说只有1000*1000的元素,才开始做。。。
AC代码:
#include <iostream> #include <cstdio> #include <cctype> #include <vector> #include <cstring> #include <queue> using namespace std; const int maxn = 1000005; int n,m; char s[10000]; long long vex[maxn]; vector<int> list[maxn]; int in[maxn];//入度 queue<int> q; void input(){ scanf("%d%d",&m,&n); //clear for(int i = 0; i <= m*n; i++){ in[i] = 0; vex[i] = 0; list[i].clear(); } for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ scanf("%s",s); if(s[0] == '='){ int col = 0;//列 int row = 0;//行 for(int k = 1; k <= strlen(s); k++){ if( k == strlen(s) || s[k] == '+'){ int u = col+(row-1)*m; int v = j+(i-1)*m; list[u].push_back(v); in[v]++; col = 0; row = 0; } else if(isalpha(s[k])){ col = col*26 + (s[k]-'A'+1); } else if(isdigit(s[k])){ row = row*10 + (s[k]-'0'); } } } else{ int u = j+(i-1)*m; int value; sscanf(s,"%d",&value); vex[u] = value; } } } } void topsort(){ for(int i = 1; i <= m*n; i++){ if(in[i] == 0) q.push(i); } for(int i = 1; i <= n*m; i++){ int u = q.front(); q.pop(); for(int j = 0; j < list[u].size(); j++){ int v = list[u][j]; vex[v] += vex[u]; if(--in[v] == 0){ q.push(v); } } } } void solve(){ topsort(); for(int i = 1; i <= m*n; i++){ if(i % m == 0) printf("%d\n",vex[i]); else printf("%d ",vex[i]); } } int main(){ int t; scanf("%d",&t); while(t--){ input(); solve(); } return 0; }
相关文章推荐
- uva196 - Spreadsheet(电子表格)
- UVA 196 Spreadsheet
- UVa 196 Spreadsheet
- uva 196 Spreadsheet 拓扑排序 。坑爹的一题
- 【uva-196】Spreadsheet (拓扑排序)妈呀居然过了
- uva 196 - Spreadsheet
- UVA196-Spreadsheet(拓扑排序)
- UVA - 196 Spreadsheet
- uva 196 - Spreadsheet
- UVa 196 - Spreadsheet
- UVA 196 Spreadsheet 解题报告
- UVA 196 - Spreadsheet
- uva196 Spreadsheet
- uva 196 Spreadsheet(拓扑排序+DFS)
- uva 196 Spreadsheet
- UVA_196_Spreadsheet
- uva 196 - Spreadsheet
- UVa 196 Spreadsheet
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- 紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))