#include <bits/stdc++.h>
using namespace std;
#define PII pair<int, int>

int main() {
    //freopen("800.in","r",stdin);

    int n; scanf("%d", &n);
    char tmp[100 * 1000 + 5];
    scanf("%s",tmp);

    string v = tmp;
    
    vector<int> prv(n, -1), nxt(n, n);

    for(int i = 1; i < n; ++i) {
        prv[i] = prv[i - 1];
        if(v[i - 1] == '1')
            prv[i] = i - 1;
    }

    for(int i = n - 2; i >= 0; --i) {
        nxt[i] = nxt[i + 1];
        if(v[i + 1] == '1')
            nxt[i] = i + 1;
    }
    
    int CHUNK = 1;

    while(CHUNK * CHUNK < n) 
        ++CHUNK;
    
    vector<PII> all;

    for(int i = 1; i < n; ++i) {
        if(v[i] == '0')
            continue;
        all.push_back(make_pair(max(0, prv[i]), i));
    }

    if(v[n - 1] != '1')
        all.push_back(make_pair(max(0, prv[n - 1]), n - 1));

    int m; cin >> m;
    vector<int> a(m, 0), b(m, 0), c(m, 0);
    vector<int> ans(m, 0);
    
       
    vector<vector<int>> L(2 * CHUNK, vector<int>());
 
    for(int i = 0; i < m; ++i) {
        scanf("%d %d %d", &a[i], &b[i], &c[i]);
        a[i]--, b[i]--;

        if(c[i] <= CHUNK) {
            L[c[i]].push_back(i);
        }
    }
    
    auto calc = [&] (int len, int c) {
        return max(0, len / c - (len % c == 0));
    };

    for(int c = 1; c <= CHUNK; ++c) {
        int sz = all.size();
        vector<int> part(sz + 1, 0);

        for(int i = 0; i < sz; ++i) {
            int len = all[i].second - all[i].first;
            part[i] = calc(len, c);
            if(i - 1 >= 0)
                part[i] += part[i - 1];
        }

        for(auto q : L[c]) {
            
            if(nxt[a[q]] >= b[q]) {
                ans[q] = calc(b[q] - a[q], c);
                continue;
            }

            ans[q] += calc(nxt[a[q]] - a[q], c);
            ans[q] += calc(b[q] - prv[b[q]], c);

            int lf = nxt[a[q]];
            int rt = prv[b[q]];

            if(rt > lf) {
                auto beg = lower_bound(all.begin(), all.end(), make_pair(lf, min(n - 1, nxt[lf]))) - all.begin();
                auto end = lower_bound(all.begin(), all.end(), make_pair(max(0, prv[rt]), rt)) - all.begin();
                int temp = part[end];

                if(beg >= 1)
                    temp -= part[beg - 1];
                ans[q] += temp;
            }
        }
    }

    for(int i = 0; i < m; ++i) {
        if(c[i] > CHUNK) {
            int start = a[i], last = -1;
            while(start < b[i]) {
                start = min(b[i], start + c[i]);
                if(start == b[i])
                    break;
                if(prv[start] < last) {
                    ans[i]++;
                } else {
                    last = start;
                    start = prv[start];
                }
            }
        }
    }

    for(int i = 0; i < m; ++i)
        cout << ans[i] << "\n";
}