题目
题解
题目给定 $n$ 次操作,每次输入两个整数 $t$ 和 $k$,当 $t=0$ 时输出 $k$ 个字符 a,否则输出 $k$ 个字符 b,要求所有操作的输出结果直接拼接,不添加空格或换行。
我们可以直接使用循环和分支结构模拟整个过程。首先读入操作次数 $n$,然后依次处理每一次操作,使用 if 判断 $t$ 的值,确定当前需要输出的字符,再通过一个循环将对应字符输出 $k$ 次即可。
需要注意的是,题目要求所有操作的结果拼接成一个完整的字符串,因此每次输出字符后不需要换行,也不需要输出空格。另外,当 $k=0$ 时,循环不会执行,自然也不会输出任何字符,不需要额外进行特判。
设所有操作输出的字符总数为 $S=\sum_{i=1}^{n}k_i$,由于每次操作只需要进行一次判断,再输出 $k_i$ 个字符,因此整个算法的时间复杂度为 $O(n+S)$。我们可以直接使用 cout 输出每一个字符,不需要额外存储最终字符串,因此额外空间复杂度为 $O(1)$,显然可以通过此题。
#include <bits/stdc++.h>
using i128 = __int128;
using ll = long long;
using ull = unsigned long long;
using de = double;
using ld = long double;
using namespace std;
void solve()
{
int n; cin >> n;
for (int i = 0; i < n; ++i)
{
int t, k; cin >> t >> k;
if (t == 0)
{
for (int j = 0; j < k; ++j)
{
cout << 'a';
}
}
else
{
for (int j = 0; j < k; ++j)
{
cout << 'b';
}
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
// cin >> t;
while (t--)
{
solve();
}
}