196 - Spreadsheet
2012-10-31 22:51
225 查看
电子表格这道题挺坑人的,数据说列有18278,实际数据不到1000,要不然是存不下的,而且还会超时,还得申请内存,并且测试数据还会造成dfs的死循环,处理不当的话就会超时,还有就是尽量不要用太多的数组,能少用就少用。不知道为什么字符转化为整数时,自己写个函数转化交到uva上居然判不出来,还得用库函数,唉…… #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <string> #include <cctype> #define MARK -2147483645 using namespace std; int row,col,num[1010][1010]; string str,s[1010][1010]; int dfs(int i,int j) { if(num[i][j]!=MARK) return num[i][j]; if(num[i][j]==MARK) { num[i][j]=row=col=0; string str=s[i][j]; for(int k=1; k<=str.size()+1; ++k) if(str[k]>='0'&&str[k]<='9') row=row*10+str[k]-'0'; else if(str[k]>='A'&&str[k]<='Z') col=col*26+str[k]-'A'+1; else if(str[k]=='+'||k==str.size()) { num[i][j]+=dfs(row,col); row=col=0; } return num[i][j]; } return 0; } int main() { //freopen("a.txt","r",stdin); int n,m,i,j,count; scanf("%d",&n); while(n--) { scanf("%d%d",&count,&m); memset(num,0,sizeof(num)); for( i=1; i<=m; ++i) for( j=1; j<=count; ++j) { cin>>str; if(str[0]=='=') { s[i][j]=str; num[i][j]=MARK; } else num[i][j]=atoi(str.c_str()); } for( i=1; i<=m; ++i) for(j=1; j<=count; ++j) if(num[i][j]==MARK) dfs(i,j); for(i=1; i<=m; ++i) { for(j=1; j<count; ++j) printf("%d ",num[i][j]); printf("%d\n",num[i][j]); } } return 0; }
相关文章推荐
- uva 196 - Spreadsheet
- uva 196 - Spreadsheet
- uva 196 Spreadsheet(电子表格)
- UVA196-Spreadsheet(拓扑排序)
- uva 196 Spreadsheet
- 196 - Spreadsheet(dfs)
- UVa 196 Spreadsheet
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- UVA 196 - Spreadsheet
- UVaOJ 196 - Spreadsheet
- uva196 - Spreadsheet(电子表格)
- UVA_196_Spreadsheet
- UVA - 196 Spreadsheet
- 【uva-196】Spreadsheet (拓扑排序)妈呀居然过了
- UVA 196 Spreadsheet 解题报告
- uva 196 Spreadsheet(拓扑排序+DFS)
- UVa 196 - Spreadsheet
- uva196 Spreadsheet
- UVa 196 Spreadsheet
- 196 - Spreadsheet//dfs