JAPLJ Contest D: Dianthus

問題
http://judge.imoz.jp/page.php?page=view_problem&pid=45&cid=8
回答(1回目) - Wrong Answer - 0% Scored
添字の順番間違えてた

回答(2回目) - Time Limit Exceeded - 30% Scored

#include <cstdio>
using namespace std;
int N, W, H, d, F;
int a[100010], b[100010], x[100010], y[100010];
char pat[100010][16][16];
int hoge[1024][1024];
int main() {
    char buf[2000];
    fgets(buf,sizeof(buf),stdin);
    sscanf(buf, "%d%d%d%d%d", &N,&W,&H,&d,&F);
    for (int i = 0; i < N; ++ i) {
        fgets(buf,sizeof(buf),stdin);
        sscanf(buf, "%d%d%d%d", &a[i],&b[i],&x[i],&y[i]);
        for (int j = 0; j < d; ++ j) {
            fgets(pat[i][j],16,stdin);
        }
        for (int j = 0; j < y[i]; ++ j) {
            for (int k = 0; k < d; ++ k) {
                int Y = b[i] + d*j + k;
                for (int l = 0; l < x[i]; ++ l) {
                    for (int m = 0; m < d; ++ m) {
                        int X = a[i] + d*l + m;
                        if (pat[i][k][m] != '.') {
                            hoge[Y][X] += pat[i][k][m]-'0';
                            if (hoge[Y][X] > F) {
                                printf("%d\n", i);
                                return 0;
                            }
                        }
                    }
                }
            }
        }
    }
    printf("%d\n",N);
}