UVa394 - Mapmaker

#include <cstdio>
#include <cstring>

using namespace std;

const int N = 15;
const int M = 1000;

struct Array
{
    int size_elem;
    int u[N];
    int l[N];
    char name[N];
    int dim;
    int c[N];
    int base;
};

Array arr[M];
int n, r;

int get(char *s);

int main()
{

#ifndef ONLINE_JUDGE
    freopen("uva_in.txt", "r", stdin);
#endif
    
    scanf("%d%d", &n, &r);

    for (int i = 1; i <= n; i++) {
        scanf("%s%d%d%d", arr[i].name, &arr[i].base, &arr[i].size_elem, &arr[i].dim);         
        for (int j = 1; j <= arr[i].dim; j++) {
            scanf("%d%d", &arr[i].l[j], &arr[i].u[j]);
        }   

        int d = arr[i].dim;
        arr[i].c[d] = arr[i].size_elem;
        for (int j = d - 1; j >= 1; j--) {
            arr[i].c[j] = arr[i].c[j + 1] * (arr[i].u[j + 1] - arr[i].l[j + 1] + 1);
        }
        
        int b = arr[i].base;
        for (int j = 1; j <= d; j++) {
            b -= arr[i].c[j] * arr[i].l[j];
        }

        arr[i].c[0] = b;
    }

    char name[N];
    int id[N];
    for (int i = 1; i <= r; i++) {
        scanf("%s", name);
        int ind = get(name);
        int d = arr[ind].dim;
        for (int j = 1; j <= d; j++) {
            scanf("%d", &id[j]);
        }

        printf("%s[", name);
        for (int j = 1; j <= d; j++) {
            printf("%d", id[j]);
            if (j != d) {
                printf(", ");
            }
        }
        printf("] = ");

        int ans = arr[ind].c[0];
        for (int j = 1; j <= d; j++) {
            //printf("c=%d, i=%d\n", arr[ind].c[j], id[j]);
            ans += arr[ind].c[j] * id[j];
        }

        printf("%d\n", ans);
    }



    return 0;
}

int get(char *s)
{
    for (int i = 1; i <= n; i++) {
        if (strcmp(arr[i].name, s) == 0) return i;
    } 

    return -1;
}

你可能感兴趣的:(UVa394 - Mapmaker)