#include<stdio.h>
#include<string.h>
char NAME[20][20];
int BA[20],W[20],D[30];
int DIM[20][40],Index,pos[30];
int calculate();
main() {
int i,j,k,name,test,lim;
char ARRAY[15];
//freopen("in.txt","r",stdin);
scanf("%d%d", &name, &test);
for(i = 0; i<name; i ++)
{
scanf("%s%d%d%d",NAME[i], &BA[i], &W[i], &D[i]);
lim = D[i]<<1;;
for(j = 0; j < lim; j ++)
scanf("%d", &DIM[i][j]);
}
for(i = 0; i<test; i ++)
{
scanf("%s",ARRAY);
for(j = 0; j<name; j ++)
if(!strcmp(ARRAY,NAME[j]))
break;
k = D[j];
Index = j;
for(j = 0; j<k; j ++)
scanf("%d", &pos[j]);
calculate();
}
return 0;
}
int calculate()
{
int i,j,k,m,L[30],pos_1[20],lim;
int address;
k = D[Index];
m = 0;
lim = k<<1;
for(j = 0; j<lim; j += 2)
{
pos_1[m] = pos[m] - DIM[Index][j];
m ++;
}
m = 0;
for(j = 0; j<lim; j += 2)
L[m++] = DIM[Index][j+1] - DIM[Index][j] + 1;
if(k == 1 )
address = pos_1[0];
else if( k == 2)
address = pos_1[0] * L[1] + pos_1[1];
else
{
address = L[1] * pos_1[0] + pos_1[1];
for(i = 2; i<k; i ++)
address = address * L[i] + pos_1[i];
}
address = W[Index] * address + BA[Index];
printf("%s[",NAME[Index]);
for(i = 0; i<k; i ++)
{
printf("%d",pos[i]);
if(i < k-1)
printf(", ");
}
printf("] = %d\n",address);
return 0;
}
#include<string.h>
char NAME[20][20];
int BA[20],W[20],D[30];
int DIM[20][40],Index,pos[30];
int calculate();
main() {
int i,j,k,name,test,lim;
char ARRAY[15];
//freopen("in.txt","r",stdin);
scanf("%d%d", &name, &test);
for(i = 0; i<name; i ++)
{
scanf("%s%d%d%d",NAME[i], &BA[i], &W[i], &D[i]);
lim = D[i]<<1;;
for(j = 0; j < lim; j ++)
scanf("%d", &DIM[i][j]);
}
for(i = 0; i<test; i ++)
{
scanf("%s",ARRAY);
for(j = 0; j<name; j ++)
if(!strcmp(ARRAY,NAME[j]))
break;
k = D[j];
Index = j;
for(j = 0; j<k; j ++)
scanf("%d", &pos[j]);
calculate();
}
return 0;
}
int calculate()
{
int i,j,k,m,L[30],pos_1[20],lim;
int address;
k = D[Index];
m = 0;
lim = k<<1;
for(j = 0; j<lim; j += 2)
{
pos_1[m] = pos[m] - DIM[Index][j];
m ++;
}
m = 0;
for(j = 0; j<lim; j += 2)
L[m++] = DIM[Index][j+1] - DIM[Index][j] + 1;
if(k == 1 )
address = pos_1[0];
else if( k == 2)
address = pos_1[0] * L[1] + pos_1[1];
else
{
address = L[1] * pos_1[0] + pos_1[1];
for(i = 2; i<k; i ++)
address = address * L[i] + pos_1[i];
}
address = W[Index] * address + BA[Index];
printf("%s[",NAME[Index]);
for(i = 0; i<k; i ++)
{
printf("%d",pos[i]);
if(i < k-1)
printf(", ");
}
printf("] = %d\n",address);
return 0;
}
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.