首页 > 其他分享 >「解题报告」CF1815E Bosco and Particle

「解题报告」CF1815E Bosco and Particle

时间:2023-06-12 15:36:30浏览次数:41  
标签:Particle int 经过 MAXN ans 考虑 Bosco CF1815E 我们

好像不难。但是没想到。

首先这玩意看起来就得拆开,要不然完全做不了。

假如我们只考虑某一个点 \(i\),考虑 \(i - 1 \to i, i \to i + 1\) 这两条边的经过次数,不难发现其它的点是不会影响这两条边的。那么我们可以直接依据题意模拟,只考虑这一个点的周期是多长,然后所有的周期 \(\mathrm{lcm}\) 起来就完了...吗?

虽然经过次数互不影响,但是它们经过还是有顺序的,而不是同步的,所以直接对周期求 \(\mathrm{lcm}\) 是错的。我们考虑如何将这些周期联系起来,发现每相邻两个点共用一条边,那么我们考虑每条边经过了多少次而不是每个点经过了多少次。这样,依照题意模拟后,我们可以得到经过 \(a_i\) 次 \(i - 1 \to i\),\(b_i\) 次 \(i \to i + 1\)。那么我们设 \(f_i\) 表示 \(i \to i + 1\) 经过了多少次,那么可以得到 \(f_{i - 1} = a_i k_i, f_i = b_i k_i\)。我们需要找出最小的 \(f_i\)。考虑固定住 \(f_0\),那么其它的 \(f_i, k_i\) 都可以得到,我们只需要保证这些都是正整数即可。我们分每一个质因子去考虑,跑一遍贪心就能得到每个质因子至少是多少了。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000005, P = 998244353;
int n;
char s[MAXN];
int nxt[MAXN];
int a[MAXN], b[MAXN];
int qpow(int a, int b) {
    int ans = 1;
    while (b) {
        if (b & 1) ans = 1ll * ans * a % P;
        a = 1ll * a * a % P;
        b >>= 1;
    }
    return ans;
}
int pri[MAXN], pcnt;
int mnp[MAXN];
void sieve(int n) {
    for (int i = 2; i <= n; i++) {
        if (!mnp[i]) mnp[i] = i, pri[++pcnt] = i;
        for (int j = 1; j <= pcnt && i * pri[j] <= n; j++) {
            mnp[i * pri[j]] = pri[j];
            if (i % pri[j] == 0) break;
        }
    }
}
int cc[MAXN];
int main() {
    sieve(1000000);
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%s", s + 1);
        int m = strlen(s + 1);
        for (int i = 2, j = 0; i <= m; i++) {
            while (j && s[i] != s[j + 1]) j = nxt[j];
            if (s[i] == s[j + 1]) j++;
            nxt[i] = j;
        }
        m = (m % (m - nxt[m]) == 0 ? (m - nxt[m]) : m);
        int cur = 0, dir = 0, ptr = 1;
        do {
            if (cur == 0) cur = 1, dir = 1, a[i]++;
            else if (cur == 2) cur = 1, dir = -1;
            else {
                if (s[ptr] == '1') dir *= -1;
                if (dir == 1) b[i]++;
                cur += dir;
                if (ptr == m) ptr = 1;
                else ptr++;
            }
        } while (!(cur == 0 && ptr == 1));
        // printf("%d %d\n", a[i], b[i]);
    }
    int f = 1;
    for (int i = 1; i <= n; i++) {
        if (!b[i]) break;
        int tmp = a[i];
        while (tmp != 1) {
            int p = mnp[tmp];
            tmp /= p;
            cc[p]--;
            if (cc[p] < 0) f = 1ll * f * p % P, cc[p] = 0;
        }
        tmp = b[i];
        while (tmp != 1) {
            int p = mnp[tmp];
            tmp /= p;
            cc[p]++;
        }
    }
    int ans = f;
    for (int i = 1; i <= n; i++) {
        f = 1ll * f * qpow(a[i], P - 2) % P * b[i] % P;
        ans = (ans + f) % P;
    }
    ans = 2ll * ans % P;
    printf("%d\n", ans);
    return 0;
}

标签:Particle,int,经过,MAXN,ans,考虑,Bosco,CF1815E,我们
From: https://www.cnblogs.com/apjifengc/p/17475126.html

相关文章

  • The Importance of Particle Size Analysis in Preformulation Studies
    Thesizeoftheparticlesiscalledparticlesize.TheparticlesizeoftheAPIiscloselyrelatedtothehomogeneityofthepreparationprocessintermsofmixing,theaccuracyofdosage,andcompressibility,andithasanimpactonthesolubility,durat......
  • Real-Time Water Waves With Wave Particles - cem yuksel - 2010
    摘要:Thisdissertationdescribesthewaveparticlestechniqueforsimulatingwatersurfacewavesandtwowayfluid-objectinteractionsforreal-timeapplications,suchasvideogames.本文描述了用于模拟水面波的波粒子技术和用于视频游戏等实时应用的双向流体-物体......
  • Wave Particles(波动粒子) - Cem Yuksel
    参考:http://www.cemyuksel.com/research/waveparticles/Thisiscapturedfromourreal-timesimulation,showingthreeboatsintheopenocean.Thedynamicsurfacewavesgeneratedduetoboatmotionaresimulatedusingwaveparticles.Inaddition,boatmotion......
  • Codeforces 1815E - Bosco and Particle
    首先,对于每个\(s_i\),我们只用保留其最小周期,证明显然。同时以多个光电门为研究对象显然状态数过多,不方便统计。考虑一下连接不同光电门的纽带是什么:显然是相邻光电门之间的空隙。对于每个光电门\(i\),如果我们只保留\(i\)作为唯一的光电门,那么显然有\(0\to1\)和\(1\to2\)......
  • js 粒子点击鼠标(particle)
    直接贴js代码在script里面就行了constparticle_canvas=document.createElement("canvas");particle_canvas.setAttribute("id","particle_canvas")document.querySel......
  • PHP轻量级验证器 Particle\Validator
    Particle\Validator是一个小巧优雅的实用的PHP验证类库,提供了一个非常简洁的API。它无需依赖其他组件,提供友好的文档,并且有利于扩展。composerrequireparticle/validat......
  • 粒子系统动力学 Particle System Dynamics
    1.介绍粒子是具有质量、位置和速度并对力作出反应但没有空间范围的物体。因为它们很简单,所以粒子是迄今为止最容易模拟的对象。尽管粒子很简单,但可以表现出广泛的有趣行......
  • "蔚来杯"2022牛客暑期多校训练营4 N-Particle Arts
    问题描述InaconfinedNIOspace,therearennnNIOparticles,theiii-thofwhichhasaia_iai​jouleenergy.TheNIOparticlesareveryspecialastheykeep......
  • 粒子滤波 PF(Particle filter)算法
    原文链接粒子滤波器方法通常用于视觉跟踪。从统计角度来看,它是一种顺序蒙特卡罗重要抽样方法,用于根据观测序列估计动态系统的潜状态变量。粒子滤波步骤:初始状态:用大量......