| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 617 | Accepted: 290 |
Description
A1 B1 C1 D1 E1 F1 ... A2 B2 C2 D2 E2 F2 ... A3 B3 C3 D3 E3 F3 ... A4 B4 C4 D4 E4 F4 ... A5 B5 C5 D5 E5 F5 ... A6 B6 C6 D6 E6 F6 ... ... ... ... ... ... ... ...
Input
Output
Sample Input
1 4 3 10 34 37 =A1+B1+C1 40 17 34 =A2+B2+C2 =A1+A2 =B1+B2 =C1+C2 =D1+D2
Sample Output
10 34 37 81 40 17 34 91 50 51 71 172
Source
#include<stdio.h>
#include<string>
#include<queue>
#include<iostream>
using namespace std;
const int N = 1005;
const int M = 26+26*26+26*26*26;
int num[N][M],n,m,in[N*M];
vector<vector<int> >mapt;
void topeSort()
{
queue<int>q;
int s;
for(int i=0;i<n*m;i++)
if(in[i]==0)
q.push(i);
while(!q.empty())
{
s=q.front(); q.pop();
int len=mapt[s].size();
for(int i=0;i<len;i++)
{
int v=mapt[s][i];
in[v]--;
num[v/m][v%m]+=num[s/m][s%m];
if(in[v]==0)
q.push(v);
}
}
}
void build(const string &s,int i,int j)
{
int len=s.length(),ans=0;
if(s[0]>='0'&&s[0]<='9')
{
for(int ti=0;ti<len;ti++)
ans=ans*10+s[ti]-'0';
num[i][j]+=ans;
}
else
{
int r=0,l,ti,tj;
while(r<len)
{
r++;
if(s[r]>='0'&&s[r]<='9')
{
ans=0;
while(s[r]>='0'&&s[r]<='9'&&r<len){
ans=ans*10+s[r]-'0'; r++;
}
num[i][j]+=ans;
continue;
}
l=r;
while(s[r]>='A'&&s[r]<='Z')r++;
if(r-l==1) tj=s[l]-'A';
else if(r-l==2) tj=26+(s[l]-'A')*26+s[l+1]-'A'-1;
else tj=26+26*26+(s[l]-'A')*26*26+(s[l+1]-'A')*26+s[l+2]-'A'-1;
ti=0;
while(s[r]>='0'&&s[r]<='9'&&r<len){
ti=ti*10+s[r]-'0'; r++;
}
ti--;
mapt[ti*m+tj].push_back(i*m+j); in[i*m+j]++;//每个二维位置(i,j)用一个数 i*m+j 表示
}
}
}
int main()
{
int t;
string str;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
mapt=vector<vector<int> >(n*m,vector<int>(0,0));
for(int i=0;i<=n*m;i++)
in[i]=0,mapt[i].clear();
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
num[i][j]=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>str;
build(str,i,j);
}
topeSort();
for(int i=0;i<n;i++)
{
printf("%d",num[i][0]);
for(int j=1;j<m;j++)
printf(" %d",num[i][j]);
printf("\n");
}
}
}
POJ1420 Spreadsheet(拓扑排序)注意的是超内存
原文:http://blog.csdn.net/u010372095/article/details/45372025