题解:P12387 纯白之箭

题解:P12387 纯白之箭

题目传送门

题目思路

构造题。

结论如下:

\[S_n= \left\{\begin{matrix} \underbrace{\texttt{bbbb}\cdots}_{a_n 个 b}\underbrace{\texttt{aaaa}\cdots}_{a_{n-1} 个 a} ,& n\bmod 2=0\\ \underbrace{\texttt{aaaa}\cdots}_{a_n 个 a}\underbrace{\texttt{bbbb}\cdots}_{a_{n-1} 个 b} ,& n\bmod 2\neq 0 \end{matrix}\right. \]

考虑证明:

  • 显然可以看到,\(S_n\)\(a_{n-1}\)\(a_n\) 存在某种联系。
  • 也就是说,\(S_n\) 可以分成 \(2\) 个部分,前半部分是 \(a_{n}\) 的 border 部分,则后半部分为 \(a_{n-1}\) 的 border 部分。
  • 所以用不同的字母表示两个部分即可。字母不一定是 ab

代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll a[N],n;
string s[N];
void slove(){
	for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=a[1];i++) s[0]+='x';
    for(int i=1;i<=n;i++){
        for(int j=1;j<=a[i+1];j++){
			if(i%2==1) s[i]+='y';
			else s[i]+='x';
		}
        for(int k=1;k<=a[i];k++){
			if(i%2==1) s[i]+='x';
			else s[i]+='y';
		}
    }
    for(int i=0;i<=n;i++) cout<<s[i]<<'\n';	
}
int main(){
    cin>>n;
    slove();
    return 0;
}

时间复杂度 \(O(n^2)\)

posted @ 2025-05-02 20:55  M1_Byte  阅读(14)  评论(0)    收藏  举报