第四题参考程序代码:
#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
const int inf =1 << 30;
const int mod =998244353;
const int N =2e5 +10,M=N<<1;
int T,n,k,q;
int len[N],a[N];
vector<int>s[N],tag[N];
bitset<N>vis[101];
inline void solve()
{
cin >>n >>k >>q;
int sumL =0;
for(int i=1;i<=n;i++)
{
cin >>len[i];
s[i].resize(len[i]+1);
tag[i].resize(len[i]+1);
for(int j=1;j<=len[i];j++)
{
cin >>s[i][j];
if(s[i][j]==1)
tag[i][j]=1;
else
tag[i][j]=0;
}
sumL +=len[i];
}
for(int t =1;t<=100;t++)
{
for(int i=1;i<N;i++)
a[i]=0,vis[t][i]=0;
for(int i=1;i<=n;i++)
{
int pre =-k;
for(int j=1;j<=len[i];j++)
{
if(j -pre +1<=k)
{
if(!a[s[i][j]])
a[s[i][j]]=i;
else if(a[s[i][j]]!=i)
a[s[i][j]]=-1;
vis[t][s[i][j]]=1;
}
if(tag[i][j])
pre =j;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=len[i];j++)
{
if(a[s[i][j]]!=0 &&a[s[i][j]]!=i)
tag[i][j]=1;
else
tag[i][j]=0;
}
}
}
for(int i=1,r,c;i<=q;i++)
{
cin >>r >>c;
if(vis[r][c])
cout <<"1\n";
else
cout <<"0\n";
}
}
int main()
{
int t=1;
cin >>t;
while(t--)
solve();
return 0;
}