如下
#include <bits/stdc++.h>
using namespace std;
const int R=1e2+5, N=2e5+5;
bool dp1[R][N]; // r round, end with n
bool dp2[R][N]; // r round, end with nth
int n, k, q, r, c, l[N], s[N], cnt[R][N];
// l: end pos of each player.
// s: complete set of nums.
// cnt: r round, end with n
int ah; // available methods of head num.
void solve()
{
memset(dp1, 0, sizeof(dp1));
memset(dp2, 0, sizeof(dp2));
memset(cnt, 0, sizeof(cnt));
cin >> n >> k >> q;
for (int i=1; i<=n; ++i) {
cin >> l[i];
l[i] += l[i-1];
for (int j=l[i-1]+1; j<=l[i]; ++j) {
cin >> s[j];
}
}
for (int i=1; i<=l[n]; ++i) {
if (s[i]==1) {
dp1[0][1] = 1;
dp2[0][i] = 1;
++cnt[0][1];
}
}
for (r=1; r<=100; ++r) {
for (int i=1; i<=n; ++i) {
ah = 0;
for (int j=l[i-1]+1; j<=l[i]; ++j) {
cnt[r-1][s[j]] -= dp2[r-1][j];
}
for (int j=l[i-1]+1; j<=l[i]; ++j) { // end with s[j]
if (j-k > l[i-1]) {
ah -= (cnt[r-1][s[j-k]]>0);
}
if (ah) {
dp1[r][s[j]]=1;
dp2[r][j]=1;
++cnt[r][s[j]];
}
ah += (cnt[r-1][s[j]]>0);
}
for (int j=l[i-1]+1; j<=l[i]; ++j) {
cnt[r-1][s[j]] += dp2[r-1][j];
}
}
}
for (int i=0; i<q; ++i) {
cin >> r >> c;
cout << dp1[r][c] << '\n';
}
return;
}
int main()
{
int T;
ios::sync_with_stdio(false);
cin >> T;
for (int i=0; i<T; ++i) {
solve();
}
return 0;
}