P12335 真真随机题解

P12335 真真随机

题目背景

摇曳轻落

这又何尝不是一种造计算机?

题目描述

你并不会伪伪随机,所以你要做一道简单题。

#include <bits/stdc++.h>
using namespace std;

int n;
unsigned int a[6],b[6];
char s[207];
signed main(){
	scanf("%s",s+1);
	n=strlen(s+1);
	a[1]=1;
	for(int _=1;_<=n;_++){
		char ch=s[_];
		for(int i=1;i<=5;i++) b[i]=0; 
		if(ch=='L'){
			b[2]+=a[1];
			b[2]+=a[3];
			b[4]+=a[5];
			b[2]+=a[4];
			b[4]+=a[2];
		}
		if(ch=='R'){
			b[1]+=a[2];
			b[3]+=a[1];
			b[3]+=a[5];
			b[4]+=a[2];
			b[4]+=a[3];
			b[5]+=a[2];
			b[5]+=a[4];
		}
		for(int i=1;i<=5;i++) a[i]=b[i];
	}
	printf("%u\n",a[1]);
	return 0;
}

如上是小 D 设计的,准备和你交互的程序。

因为小 D 不会配置交互题,所以请你构造一种输入使得该程序的输出恰好为 n n n

输入格式

输入一行,一个整数 n n n

输出格式

输出一行,一个字符串,表示提供给小 D 的输入。

请保证此字符串非空,否则可能出现意料之外的结果。

此字符串长度不能超过 200 200 200,否则无法通过对应测试点。

你只需要输出任意一种满足条件的字符串即可获得分数。

如果无法表示出某个数,请仅输出一行 -1

输入输出样例 #1

输入 #1

3

输出 #1

RLRLLLRLLLLR

输入输出样例 #2

输入 #2

3

输出 #2

LLRLLRLLRLLR

输入输出样例 #3

输入 #3

11776

输出 #3

RLRLRLLLRLRRLRLRLRLRLRLRLRLRLRLR

输入输出样例 #4

输入 #4

16

输出 #4

LRLRLRLRRLLRLR

输入输出样例 #5

输入 #5

47

输出 #5

RLRRLLRLRRLLRLRLLRRRLRRRRLR

输入输出样例 #6

输入 #6

720

输出 #6

RLRRRLRRLRLRRRLRRLLLRLLLRLRLLLR

输入输出样例 #7

输入 #7

176374

输出 #7

RRLLRRLRRLLRLLRRLLRLLRRLRLRLRRLLRLLRLLLLRLRLLRLLRLLRLLRLRLLRLR

说明/提示

样例解释

你可以直接把字符串输入进程序里。另外本题的程序不是瞎编的,具有一定实际意义,但是作为 J 组过于复杂所以无法告知你。

数据范围

本题共 20 20 20 个测试点。

对于前 20 % 20\% 20% 的数据有 n ≤ 10 n\le 10 n10

对于前 40 % 40\% 40% 的数据有 n ≤ 10 5 n\le 10^5 n105

对于前 60 % 60\% 60% 的数据,保证在对应范围内随机生成。

对于所有数据,保证 0 ≤ n ≤ 10 9 0 \le n\le 10^9 0n109。你的字符串可以让小 D 的程序自然溢出。

思路

构造,直接枚举细节方法即可。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long n,p,r;
int main(){
    cin>>n;
    if(n==0){
        cout<<"L"<<endl;
        return 0;
    }
    if(n==1){
        cout<<"LR"<<endl;
        return 0;
    }
    while(n%2==0){
        n/=2;
        r++;
    }
    for(int i=0;i<=30;i++){
        if(((n>>i)&1)==1){
            p=i;
        }
    }
    n-=((1<<p)-1);
    cout<<"L"<<"";
    for(int i=0;i<=p-1;i++){
        if(((n>>(i+1))&1)==1){
            cout<<"RRLL"<<"";
        }
        cout<<"RL"<<"";
    }
    cout<<"L"<<"";
    //cout<<r<<endl;
    for(int i=1;i<=r;i++){
        cout<<"RL"<<"";
    }
    cout<<"R"<<endl;
	return 0;
}
posted @ 2026-01-28 21:22  bz02_2023f2  阅读(1)  评论(0)    收藏  举报  来源