1 条题解
-
0
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5 + 7; int n, k, q, dp[110][N]; vector<int> G[N]; void solve() { scanf("%d%d%d",&n,&k,&q); memset(dp, -1, sizeof dp); // 初始化!!! for(int i = 1; i <= n; i ++) { int L;scanf("%d",&L); G[i].clear();for(int j =1, x; j <= L; j ++)scanf("%d",&x), G[i].push_back(x); } dp[0][1] = 0; // 第一轮一定从1开始 for(int r = 1; r <= 100; r ++) // 枚举轮数 { for(int i = 1; i <= n; i ++)// 每个人对当前轮做贡献 { int cnt = 0; // 记录还有多少个可以作为接龙结尾的数 for(auto x : G[i])// 遍历第i行每一个数 { if(cnt > 0) { if(dp[r][x] == -1) dp[r][x] = i; // 第一次被接龙 else if(dp[r][x] != i) dp[r][x] = 0; // 第二次被接龙后可以任意接龙 -- cnt; // 要接龙的个数-- } if(dp[r - 1][x] != -1 && dp[r - 1][x] != i) cnt = k - 1; // x之后的k-1个数都可以被接 } } } while(q --) { int r, c;scanf("%d%d",&r,&c); printf("%d\n", ( dp[r][c] == -1? 0 : 1) ); } } int main() { int T;scanf("%d",&T); while(T --) solve(); return 0; }
- 1
信息
- ID
- 2553
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- 递交数
- 290
- 已通过
- 25
- 上传者