代码编织梦想

题目描述

n 名演员围成一个圆圈跳集体舞,每名演员都有一个位置。演员与位置的编号都是从 1 开始到 n 结束。最初,每个演员都站在自己对应的位置编号上。

在舞蹈进行的过程中,陆续会出现若干变换,这些变变换形分成两种类型:

  • 第一种变换称为旋转,用字母 r 表示。在这种变换下:

    • 原先 1 号位上的演员将移动去 2 号位
    • 原先 2 号位上的演员将移动去 3 号位
    • … 以此类推
    • 原先 n 号位上的演员将移动去 1 号位
  • 第二种变换称为翻转,用字母 f 表示。在这种变换下:

    • 1 号位上的演员与 n 号位上的演员对换
    • 2 号位上的演员与 n−1 号位上的演员对换
    • … 以此类推
    • 特别注意,若 n 是奇数,则在翻转变换下,(n+1)/2 号位置上的演员位置不变。

给定一个字符序列,表示集体舞依次经历的变换,输出每个位置在舞蹈结束后的演员编号。

输入格式

  • 第一行:单个整数 n
  • 第二行:一个字符串 s 表示变换序列,保证只由 r 与 f 组成。

输出格式

  • 共 n 行:在第 i 行有一个整数,表示舞蹈结束时,第 i 个位置上的演员编号。

数据范围

设 ∣s∣ 表示输入字符串的长度

  • 30% 的数据,1≤n≤3000,1≤∣s∣≤3000
  • 60% 的数据,1≤n≤100,000,01≤∣s∣≤100,000
  • 100% 的数据,1≤n≤500,000,1≤∣s∣≤500,000

样例数据

输入:

4
rfr

输出:

4
3
2
1

说明:

(1,2,3,4)--r-->(4,1,2,3)
(4,1,2,3)--f-->(3,2,1,4)
(3,2,1,4)--r-->(4,3,2,1)

解析:经分析,翻转会影响顺序或者倒序,倒序时旋转会变成反方向,旋转只影响开始位置,所以可以将翻转和旋转都统计起来,最后一并处理。详见代码。

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int jl=0;//距离,默认为0,即每个演员向右移动的距离
bool fx=1;//方向,默认1为顺序
int a[500005];
int main(){
    cin>>n>>s;
    int len;
    len=s.size();
    for (int i=0;i<len;i++){
        if (s[i]=='f'){//如果是f,方向变为反方向
            fx=!fx;
        }
        if (s[i]=='r'){//如果是r,则变化距离
            if (fx){//正方向,距离增加
                jl++;
            }else{//反方向,距离减少
                jl--;
            }
        }
    }
    jl%=n;//距离超过一圈的部分去掉
    if (jl>0){//正方向移动
        for (int i=1;i<=n;i++){
            a[i]=i-jl;
            if (a[i]<=0) a[i]+=n;//小于等于0的加上n
        }
    }else{//反方向移动
        for (int i=1;i<=n;i++){
            a[i]=i-jl;
            if (a[i]>n) a[i]-=n;//大于n的减掉n
        }
    }
    if (fx){//方向为正,正序输出
        for (int i=1;i<=n;i++){
            printf("%d\n",a[i]);
        }
    }else{//方向为反,逆序输出
        for (int i=n;i>=1;i--){
            printf("%d\n",a[i]);
        }
    }
    return 0;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36230375/article/details/130722383

上海市计算机学会月赛 2022年5月乙组_dsmtyu的博客-爱代码爱编程

上海市计算机学会月赛 2022年5月乙组 天平与砝码(二)数山峰狼人游戏(二)两个闹钟 天平与砝码(二) 正负背包DP递推求解。 #include <iostream> using namespace std; const int N = 110, M = 200010, B = M / 2; int n, m, ans = 0

上海计算机学会2023年1月月赛c++乙组t2树的最大和-爱代码爱编程

树的最大和 内存限制: 256 Mb时间限制: 1000 ms 题目描述 给定一棵 n 个结点的树,1 号点为根。每个点都有一个权值,第 i 个点的权值为 ai​,权值有正有负。请在这棵树里找到一个连通分量,该连通分量内结点的权值之和达到最大,输出这个最大和。 连通分量是指树上一些点的集合,如果用树上的边连接这些点不需要经过连通分量外的点。连通分量

上海计算机学会2023年2月月赛c++乙组t4接单-爱代码爱编程

接单 内存限制: 256 Mb时间限制: 1000 ms 题目描述 有 n 份工作,小爱若完成第 i 份工作,则会收到报酬 pi​,小爱每天刚好够完成 1 份工作。这些工作还有截止日期,其中第 i 份工作必须在第 di​天结束之前完成,否则没有报酬。 请规划每天的工作,使得小爱赚到的钱最多。 输入格式 第一行:单个整数 n, 第二行到 n+1 

上海计算机学会2023年1月月赛c++乙组t1无限延展-爱代码爱编程

无限延展 内存限制: 256 Mb时间限制: 1000 ms 题目描述 给定一个字符串 s,取出 s 的最后一个字符,将这个字符移动到 s 的头部,构成一个新字符串 s′。例如 s=abcd,则 s′=dabc。然后将 s′ 拼接在 s 后面变成一个更长的字符串,反复这个过程就可以得到任意长的字符串。例如 abcd 将变成 abcddabc,然后会变

上海计算机学会2023年3月月赛c++乙组t1卡片游戏-爱代码爱编程

卡片游戏 内存限制: 256 Mb时间限制: 1000 ms 题目描述 小爱拿到了n张卡片,每张卡片的正反面均写有一个数字,其中第i张卡片的正面的数字为ai​,反面的数字为bi​。 他想把每张卡片选取合适的一面后,放入下列算式中,卡片之间顺序可以交换,但每张卡片只能用一次。 请问,小爱通过以上操作,能得到的最大值是多少? 输入格式 第一行

上海计算机学会2023年3月月赛c++乙组t2邀请的方案数-爱代码爱编程

邀请的方案数 内存限制: 256 Mb时间限制: 1000 ms 题目描述 你非常仰慕高年级的小爱学长和小艾学姐,于是他想要邀请小爱学长和小艾学姐同他出去游玩,但是小爱和小艾都不认识你,他们不会同不认识的人出去游玩。因此你决定在他所认识的n名同学中选一些人一并邀请,这样只要这些人中有人认识小爱和小艾,他就可以将学长和学姐请来。 这n名同学中,其中a

上海计算机学会2023年3月月赛c++乙组t3神秘的信号-爱代码爱编程

神秘的信号 内存限制: 256 Mb时间限制: 1000 ms 题目描述 现在有一种神秘的机器,它每次只会发出一种确定的信号a,a是一个字符串,且只可能包含“L”,“C“,”R”,“&”,“O”,“I”这六种字符,并且每个字符至多出现一次,这种机器可以不断重复发送这一信号a。然后给你一个字符串s,表示接收器所收到的信号,它是由不同的神秘机器发

上海计算机学会2023年3月月赛c++乙组t4平整序列(四)-爱代码爱编程

平整序列(四) 内存限制: 256 Mb时间限制: 1000 ms 题目描述 给定一个整数序列a1​,…,an​ ,小爱希望通过一系列调整操作使所有数字均相等,但可惜他只有m次机会,每次机会可以将序列中任意一个整数更改成他想要的值。 尽管他没有办法让所有的数字在操作后均相等,但他还是想让整个序列看上去更平整一些。于是小爱定义了不平整指数,所谓一个序

上海市计算机学会竞赛平台2023年3月月赛乙组t1-3-爱代码爱编程

T1 卡片游戏 题目描述 小爱拿到了n张卡片,每张卡片的正反面均写有一个数字,其中第ii张卡片的正面的数字为 a

上海计算机学会2023年5月月赛c++乙组t3最小倍数-爱代码爱编程

题目描述 给定一个数字 x ,小爱想知道在所有仅由 0,1 构成的十进制数字中,最小的 x 的倍数是多少? 输入格式 输入第一行,一个正整数 q 表示询问次数 接下来 q 行,每行一个正整数xi​,表示第 i 次询问的数字 输出格式 输出共 q 行, 其中第 i 行表示第 i 个询问的答案 数据范围 对于30%的数据,1≤x≤20对于60%的

上海市计算机学会2022年10月月赛乙组试题_上海市计算机学会 算式求值(二)-爱代码爱编程

第1题 录制节目 题目描述 电视里将要播放 n n n 个节目,第 i i i 个节目从时刻 s i s_i si​ 开始,到 t i t_i ti​ 结束,没有回放。小爱有两台录像机,利用这两台录像机,小爱最多

上海市计算机学会2022年11月乙组解题报告_上海市计算机学会竞赛平台 异或方程-爱代码爱编程

上海市计算机学会2022年11月乙组解题报告 数对统计 题目描述 给定的 n

上海计算机学会2023年2月月赛c++丙组t4平分数字(一)_上海市计算机学会竞赛平台 2022年2月月赛丙组-爱代码爱编程

平分数字(一) 内存限制: 256 Mb时间限制: 1000 ms 题目描述 给定 n 个整数:a1​,a2​,⋯,an​,请判定能否将它们分成两个部分(不得丢弃任何数字),每部分的数字之和一样大。 输入格式 第一行:单个整数 n; 第二行:n 个整数,表示 a1​,a2​,⋯,an​。 输出格式 若能否平分,输出 Matched,否则输出