题目:救救AR
来源:西南科技大学第十六届ACM程序设计竞赛暨绵阳市邀请赛

解题思路

输出一个长度不超过 n 的字符串,这个字符串存在 n 个子序列是 "AR"。
子序列的定义:从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列,这样的新序列称为最初序列的子序列。

最初的序列可以表示为 AR...RA...AR...R,即 1 个 A,k 个 R,i-1 个 A,j 个 R。
这样,有 i * j + k 个子序列是 "AR"。此时序列的长度为 i + j + k

C++代码

#include<iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    for(int i=1; i<n; ++i){
        int j = n / i;
        int k = n - i*j;
        if(i + j + k <= n){
            string s1 = "A";
            string s2(k, 'R');
            string s3(i-1, 'A');
            string s4(j, 'R');
            cout << s1 + s2 + s3 + s4 << endl;
            return 0;
        }
    }
    cout << -1 << endl;
    return 0;
}