专栏文章

题解:AT_arc127_b [ARC127B] Ternary Strings

AT_arc127_b题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio7mryl
此快照首次捕获于
2025/12/02 14:41
3 个月前
此快照最后确认于
2025/12/02 14:41
3 个月前
查看原文
首先有一个思路,最大值的第一位一定是 22,然后尽量填 00,其次是 1212,但是这么想就相对复杂了,不是出题人的本意了。
我们抛弃第一位,然后剩下的假如说能选出一种暂时方案,我们来看是否能构造出解,我们对于剩下的两个转换一下就行了,所以第 ii 位为 0,1,20,1,2 的个数一定就是 nn
然后就可以构造最小的一组放到 22 的一组,因为前导零是保留的,所以直接三进制枚举就行了。
CPP
#include <bits/stdc++.h>

#define rep(i, l, r) for (int i = (l); i <= (int)(r); i++)
#define per(i, l, r) for (int i = (r); i >= (int)(l); i--)
#define Debug(...) fprintf(stderr, __VA_ARGS__)
#define max(a, b)  (!((a) < (b)) ? (a) : (b))
#define min(a, b)  ((a) < (b) ? (a) : (b))
using namespace std;
using i64 = long long;
#define int i64
const int maxn = 1000050, mod = 998244353, B = 700;

signed main() {
  cin.tie(nullptr)->sync_with_stdio(false);

  int n, l;
  cin >> n >> l;
  rep(i, 0, 2) {
  	rep(j, 0, n - 1) {
  		int t = j;
  		cout << 2 - i;
  		stack<int> stk;
  		while (t) {
  			stk.push((t % 3 + i) % 3);
  			t /= 3;
  		}
  		while ((int)stk.size() < l - 1) {
  			stk.push(i);
  		}
  		while (stk.size()) {
  			cout << stk.top();
  			stk.pop();
  		}
  		cout << "\n";
  	}
  }
  return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...