BUN 34981 A Matrix

来源:互联网 发布:c语言 原版书 编辑:程序博客网 时间:2024/05/28 22:07

每次从第一行选一个数,向下找递增的一条链。。。

#include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 100005;vector<int> vec[maxn];int cnt[maxn];int res[maxn], ans, n, m;void solve(int pos, int t){if(pos == m || cnt[pos+1] == 0 || vec[pos+1][cnt[pos+1]-1] < vec[pos][t]) return;res[ans++] = vec[pos+1][cnt[pos+1]-1];cnt[pos+1]--;solve(pos+1, cnt[pos+1]);}void work(){scanf("%d%d", &n, &m);int ok = 1;for(int i = 1; i <= n; i++) vec[i].clear();for(int i = 1; i <= m; i++) {scanf("%d", &cnt[i]);for(int j = 0; j < cnt[i]; j++) {int x;scanf("%d", &x);if(j && x < vec[i][j-1]) ok = 0;vec[i].push_back(x);}}if(!ok) {printf("No solution\n");return;}ans = 0;for(int i = vec[1].size()-1; i >= 0; i--) {res[ans++] = vec[1][i];solve(1, i);}if(ans != n) printf("No solution\n");else {for(int i = ans - 1; i >= 0; i--) printf("%d%c", res[i], i ? ' ' : '\n');}}int main(){int _;scanf("%d", &_);for(int i = 1; i <= _; i++) {printf("Case #%d: ", i);work();}return 0;}


0 0
原创粉丝点击