L1-049 天梯赛座位分配

模拟题,认真读题,多做自然熟练

不过有个特别有意思的点,这题怎么处理这个要求呢?

如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。

 我用的是 

vec[i][j - 1] + 1 == vec[i][j]  
        vec[i][j] = idx;

这就会出现一个特别奇特的事,比如vec[1][1],正常应该是1,但由于vec[1][0]是0,这就导致vec[1][1]成了2,后续也一样,出现每个点多1的情况,输出的时候-1就可以,但还是很有意思的

避免这种情况那就对0列做个初始化,其他的照旧

#include<bits/stdc++.h>
#define endl '\n'
#define int int64_t
#define ld long double
using namespace std;
int dx[] = { -1,0,1,0 };
int dy[] = { 0,1,0,-1 };
const int NC = 2e3 + 10;
char ches[NC][NC];
const int mod = 1e9 + 7;
const int N = 2e5 + 10;
int a[N], b[N], n, m;
int vec[NC][NC];
void solve() {
	cin >> n;
	int mx = 0;
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
		mx = max(mx, a[i]);
		for (int j = 1; j <= a[i] * 10; ++j)
			vec[i][j] = -1;
	}
	for(int i = 1;i <= n;++i)
		vec[i][0] = INT_MAX;
	int idx = 1;
	for (int j = 1; j <= mx * 10; ++j) {
		for (int i = 1; i <= n; ++i) {
			if (vec[i][j] == -1) {
				//if(i == 1 && j == 1)cout <<"idx = " << idx << endl;
				vec[i][j] = idx;
				//cout << "vec[1][1] = " << vec[1][1] << endl;
				idx++;
				if (vec[i][j - 1] + 1 == vec[i][j]) {
					vec[i][j] = idx;
					idx++;
				}
			}
		}
	}
	//cout << "vec[1][1] = " << vec[1][1] << endl;
	for (int i = 1; i <= n; ++i) {
		cout << "#" << i << endl;
		for (int j = 1; j <= a[i]; ++j) {
			for (int k = 1; k < 10; ++k) {
				cout << vec[i][(j - 1) * 10 + k] << " ";
			}
			cout << vec[i][j * 10]<< endl;
		}
	}
}
signed main() {
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int t = 1;
	//cin >> t;
	while (t--) {
		solve();
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值