A

观察到 ,因此连续9次洗2遍和洗5遍是等价的。之后模拟即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<string,int>m1;
map<int,int>m2;
string a[111],b[111];
int dp[11][14];
int main(){
    ll n,m,i,j,k,t;
    while(cin>>a[0]){
        for(i=1;i<13;i++)cin>>a[i];
        for(i=0;i<13;i++){
            m1[a[i]]=i;
        }
        for(i=0;i<13;i++){
            cin>>b[i];
            m2[i]=m1[b[i]];
        }

        for(i=0;i<13;i++)dp[0][i]=i;
        for(i=1;i<11;i++){
            for(j=0;j<13;j++){
                dp[i][j]=m2[dp[i-1][j]];
            }
        }
        for(i=0;i<13;i++){
            cout<<a[dp[9][i]]<<" ";
        }
        cout<<endl;
    }
}

B

n个数有n-1个数不同,那么一定存在2个数相同。因此最终答案是



#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<string,int>m1;
map<int,int>m2,m3;
string a[111],b[111];
ll dp[111111];
int mod = 1e9+7;
int main(){
    ll n,m,i,j,k,t;
    dp[0]=1;
    for(i=1;i<=1e5;i++){
        dp[i]=dp[i-1]*i%mod;
    }
    while(cin>>n){
        if(n==1)cout<<0<<endl;
        else cout<<n*(n-1)/2%mod*dp[n]%mod<<endl;
    }
}

C

小于4时,显然无解。 不小于4时,可以这样构造:
为偶数,那么先输出2个A,然后输出 个R
为奇数,设 ,那么先输出2个A,然后输出 个R,再输出AR

#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<string,int>m1;
map<int,int>m2;
string a[111],b[111];
int dp[5][14];
int main(){
    ll n,m,i,j,k,t;
    while(cin>>n){
        if(n<4)cout<<-1<<endl;
        else{
            if(n&1){
                cout<<"AA";
                for(i=0;i<n-3;i+=2)cout<<"R";
                cout<<"AR";
            }
            else{
                cout<<"AA";
                for(i=0;i<n;i+=2)cout<<"R";
            }
            cout<<endl;
        }
    }
}

E

虽然数据是1e6,但我们可以用一个桶来统计每个数是否出现过,缩小到1e5。
然后对于每个出现过的数,统计其每个素因子的最大幂次。最终的lcm就是这些素因子的幂次之积。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<string,int>m1;
map<int,int>m2;
int a[1111111];
int t[111111],mod=1e9+9;
void gao(int x){
    int i;
    for(i=2;i*i<=x;i++){
        if(x%i==0){
            int cnt=0;
            while(x%i==0){
                x/=i,cnt++;
            }
            t[i]=max(t[i],cnt);
        }
    }
    if(x>1)t[x]=max(t[x],1);
}
int main(){
    ll n,i,j,k,x;
    cin>>n;
    for(i=0;i<n;i++){
        cin>>x;
        a[x]=1;
    }
    for(i=1;i<=1e5;i++){
        if(a[i]){
            gao(i);
        }
    }
    ll res=1;
    for(i=0;i<1e5;i++){
        while(t[i]--)res=res*i%mod;
    }
    cout<<res;
}