您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: