uva 196 Spreadsheet
2012-11-25 01:02
330 查看
题目链接:
uva(不推荐,太慢)
hust(推荐)
poj(据说数据比较水)
题目大意:
给你一个表格,表格中有数字和式子(其他单元格的数字的求和)。
要你得到最终的表格(把式子化为数字)。
题目思路:
先吐槽一下这题,尼玛太吓人的数据规模了。。。
999*18278,还要保存等式。。。我勒个擦,一个等式就算只有10个字符,这个规模也不小了,poj上居然只给是10000K,表示对他们的数据很好奇。
这题的思路就是纯模拟,如果是等式就深搜下去,因为题目保证不会有环。
因为数据规模未知,所以用vector来保存等式关系。
代码:
uva(不推荐,太慢)
hust(推荐)
poj(据说数据比较水)
题目大意:
给你一个表格,表格中有数字和式子(其他单元格的数字的求和)。
要你得到最终的表格(把式子化为数字)。
题目思路:
先吐槽一下这题,尼玛太吓人的数据规模了。。。
999*18278,还要保存等式。。。我勒个擦,一个等式就算只有10个字符,这个规模也不小了,poj上居然只给是10000K,表示对他们的数据很好奇。
这题的思路就是纯模拟,如果是等式就深搜下去,因为题目保证不会有环。
因为数据规模未知,所以用vector来保存等式关系。
代码:
#include <stdlib.h> #include <string.h> #include <stdio.h> #include <ctype.h> #include <math.h> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <string> #include <iostream> #include <algorithm> using namespace std; #define ll __int64 #define ls rt<<1 #define rs ls|1 #define lson l,mid,ls #define rson mid+1,r,rs #define middle (l+r)>>1 #define eps (1e-8) #define clr_all(x,c) memset(x,c,sizeof(x)) #define clr(x,c,n) memset(x,c,sizeof(x[0])*(n+1)) #define MOD (1000000007) #define inf (0x3f3f3f3f) #define pi (acos(-1.0)) #define _max(x,y) (((x)>(y))? (x):(y)) #define _min(x,y) (((x)<(y))? (x):(y)) #define _abs(x) ((x)<0? (-(x)):(x)) #define getmin(x,y) (x= (x<0 || (y)<x)? (y):x) #define getmax(x,y) (x= ((y)>x)? (y):x) template <class T> void _swap(T &x,T &y){T t=x;x=y;y=t;} int TS,cas=1; const int M=20000+5; int n,m; bool **ok; int **a; char val[111]; struct node{ int x,y; bool flag; node(int _x=0,int _y=0,bool _f=0){x=_x,y=_y,flag=_f;} }; vector<node>g; void insert(int x,int y){ ok[x][y]=0; g.push_back(node(x,y,1)); a[x][y]=g.size(); for(int i=1;val[i];i++){ x=y=0; for(;val[i]!='+' && val[i];i++){ if(isalpha(val[i])) y=y*26+val[i]-'A'+1; else x=x*10+val[i]-'0'; } if(val[i]) g.push_back(node(x,y,1)); else break; } g.push_back(node(x,y,0)); } int dfs(int x,int y){ if(ok[x][y]) return a[x][y]; int i=a[x][y]; for(a[x][y]=0;;i++){ node& t=g[i]; a[x][y]+=dfs(t.x,t.y); if(t.flag==0) break; } ok[x][y]=1; return a[x][y]; } void run(){ int i,j; scanf("%d%d",&n,&m); a=new int *[m+1]; ok=new bool *[m+1]; for(i=1;i<=m;i++){ a[i]=new int[n+1]; ok[i]=new bool[n+1]; } g.clear(); for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ scanf("%s",val); if(val[0] != '='){ sscanf(val,"%d",&a[i][j]); ok[i][j]=1; }else insert(i,j); } } for(i=1;i<=m;i++){ for(j=1;j<n;j++) printf("%d ",ok[i][j]? a[i][j]:dfs(i,j)); printf("%d\n",ok[i] ? a[i] :dfs(i,n)); } } void preSof(){ } int main(){ //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); preSof(); //run(); //while(~scanf("%d",&n)) run(); for(scanf("%d",&TS);cas<=TS;cas++) run(); return 0; }
相关文章推荐
- UVA 196 Spreadsheet 解题报告
- uva196 - Spreadsheet(电子表格)
- UVA 196 - Spreadsheet
- uva 196 Spreadsheet(拓扑排序+DFS)
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- uva 196 Spreadsheet(电子表格)
- UVa 196 - Spreadsheet
- UVA196-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
- uva196 Spreadsheet
- UVa 196 Spreadsheet
- UVA512 - Spreadsheet Tracking