YACS 2023年5月月赛 乙组 T2 集体舞 题解

题目链接

loc[i]i 的位置,我们看看经过操作后会变成什么。

初始时 loc[i]=i。如果有 r 操作,那么 loc[i]++,如果是 f 操作,那么 loc[i] 变为 nloc[i]+1 即可。

最终的每个 loc[i] 都可以表示为 sign1 ×n+sign2i+extrasign 要么是 1,要么是 1

对于 r 操作,仅需把 extra 加一。

对于 f 操作,不难发现变成 nsign1×nsign2×iextra+1,化简为 (1sign1)×n+(sign2)×i+(1extra),不言而喻了吧。

所以我们只需要维护几个 tag,时间复杂度 O(n),另外注意用下 getchar,不然可能会 TLE。

 

复制代码
#include <iostream>
using namespace std;
int n;
char o;
int usen, sign = 1, add;
int a[500005];
int main () {
    cin >> n;
    o = getchar ();
    o = getchar ();
    while (o != '\n') {
        if (o == 'r') ++ add;
        else {
            usen = !usen;
            sign = -sign;
            add = 1 - add;
        }
        o = getchar ();
    }
    for (int i = 1; i <= n; i ++) {
        int loc = (usen * n + sign * i + add);
        loc = (loc % n + n) % n;
        if (loc == 0) a[n] = i;
        else a[loc] = i;
    }
    for (int i = 1; i <= n; i ++) cout << a[i] << "\n";
    return 0;
}
复制代码

 

posted @   Xy_top  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示