您的位置:首页 > 其它

uva 196 - Spreadsheet

2013-03-16 15:54 295 查看
这道题,是我见过的最坑的题目之一,很简单,思路也很简单,只是步骤多一点。让我整整吐血吐了一天的是在行方向因为用了字母,所以在进制上是26!!!!!!!!!!各位,如果你是time limit exceeded或者是runtime error,不要再被坑了,百分之九十就是在处理formula的时候进制的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#include<stdio.h>

typedef struct node{

int val,nf,fml[50][2],n;

}node;

char s[1000];

node sprsht[1100][1100];

int get_num(char *s){

int sum=0,i=0,pre=1;

if(s[i]=='-')

{

pre=-1;

i++;

}

for(;s[i];i++)sum=10*sum+s[i]-'0';

return pre*sum;

}

void get_formula(int a,int b,char *s){

int i=1,col,row,t=0;

sprsht[a][b].n=sprsht[a][b].nf=sprsht[a][b].fml[0][0]=sprsht[a][b].fml[0][1]=0;

while(s[i]){

if(s[i]>='A'&&s[i]<='Z'){

sprsht[a][b].fml[sprsht[a][b].n][1]=26*sprsht[a][b].fml[sprsht[a][b].n][1]+s[i]-'A'+1;//就在这里,死人坑爹

}else if(s[i]>='0'&&s[i]<='9'){

sprsht[a][b].fml[sprsht[a][b].n][0]=10*sprsht[a][b].fml[sprsht[a][b].n][0]+s[i]-'0';

}else {

sprsht[a][b].n++;

sprsht[a][b].fml[sprsht[a][b].n][0]=sprsht[a][b].fml[sprsht[a][b].n][1]=0;

}

i++;

}

sprsht[a][b].n++;

}

int dfs(int i,int j){

int k;

if(sprsht[i][j].nf) return sprsht[i][j].val;

for(k=sprsht[i][j].val=0;k<sprsht[i][j].n;k++)

sprsht[i][j].val+=dfs(sprsht[i][j].fml[k][0],sprsht[i][j].fml[k][1]);

sprsht[i][j].nf=1;

return sprsht[i][j].val;

}

main()

{

int T,col,row,i,j,num,count;

scanf("%d",&T);

while(T--){

scanf("%d %d",&col,&row);

for(i=1,count=0;i<=row;i++){

for(j=1;j<=col;j++){

scanf("%s",s);

if(s[0]=='='){

get_formula(i,j,s);

}

else{

sprsht[i][j].val=get_num(s);

sprsht[i][j].nf=1;

}

}

}

for(i=1;i<=row;i++)

{

printf("%d",dfs(i,1));

for(j=2;j<=col;j++)

printf(" %d",dfs(i,j));

printf("\n");

}

}

return 0;

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