首页 > 其他分享 >cf刷题杂记(2)

cf刷题杂记(2)

时间:2024-09-05 20:52:42浏览次数:4  
标签:cur int cf num 杂记 ans 序列 dp 刷题

Educational Codeforces Round 167 (Rated for Div. 2)

D. Smithing Skill (D)

很无语的一题······ 运用类似单调队列思维处理出最优的选择序列,之后发现 \(c_i\leq 10^9\) 没法预处理,二分查找又会被卡成 \(n^2\log n\),唯独没想到在 \(a_i\) 的 \(10^6\) 范围内预处理()不好评价。

bool cmp(xxx n, xxx m) {
    if(n.a - n.b != m.a - m.b) {
        return n.a - n.b < m.a - m.b;
    }
    return n.a < m.a;
}
int main() {
    // ...
    sort(x + 1, x + n + 1, cmp);
    x[0] = ans[0] = {INF, INF + 1};
    for(int i = 1; i <= n; i++) {
        if(x[i].a - x[i].b != x[i - 1].a - x[i - 1].b) {
            if(x[i].a < ans[cnt].a) ans[++cnt] = x[i];
        }
    }
    int cur = cnt;
    for(int i = ans[cnt].a; i < N; i++) {
        if(i >= ans[cur - 1].a) cur--;
        if(!cur) break;
        int num = (i - ans[cur].a) / (ans[cur].a - ans[cur].b) + 1;
        int x = i - num * (ans[cur].a - ans[cur].b);
        dp[i] = num * 2 + dp[x];
    }
    ll sum = 0;
    for(int i = 1; i <= m; i++) {
        scanf("%d", &c[i]);
        if(c[i] < ans[1].a) sum += dp[c[i]];
        else {
            int num = (c[i] - ans[1].a) / (ans[1].a - ans[1].b) + 1;
            int x = c[i] - num * (ans[1].a - ans[1].b);
            sum += dp[x] + num * 2;
        }
    }

E. Distance to Different (E)

不同的 \(a\) 序列可能产生相同的 \(b\) 序列,因此只需要考虑可能的合法 \(b\) 序列;\(a\) 中连续 \(x\) 个相同的数会在 \(b\) 中产生一段长度为 \(x\) 的特定序列,题目即等价于将 \(b\) 划分成至少 \(k\) 个不同的序列。对于除2以外的所有 \(x\),其产生的序列具有特异性,但 \(x = 2\) 时,若该序列位于 \(b\) 的中部,则 \(b = 1\),与 \(x = 1\) 情况相同,计算时应注意舍去。设 \(dp_{i, j}\) 表示将前 \(i\) 个数划分成 \(j\) 个序列的方案数,特别地,为节省空间,\(j = k\) 时表示划分出至少 \(k\) 个序列的方案数。使用前缀和优化转移,复杂度 \(O(nk)\).

    dp[0][0] = 1;
    sum[0] = 1; // 初始化
    for(int i = 1; i <= n; i++) {
        for(int j = 0; j <= k; j++) {
            dp[i][min(j + 1, k)] += sum[j];
            if(i > 2 && i < n) {
                dp[i][min(j + 1, k)] += (mo - dp[i - 2][j]);
            }
            dp[i][min(j + 1, k)] %= mo;
        }
        for(int j = 1; j <= k; j++) {
            sum[j] += dp[i][j];
            sum[j] %= mo;
        }
    }

标签:cur,int,cf,num,杂记,ans,序列,dp,刷题
From: https://www.cnblogs.com/meowqwq/p/18398038

相关文章

  • CF704B Ant Man 题解
    题目传送门前置知识预设性DP解法考虑统计每个数单独的贡献,然后进行预设性DP。设\(f_{i,j}\)表示当前填了\([1,i]\)时有\(j\)个连续段的最小权值,边界为\(f_{0,0}=0\)。对\(i(i\nes,i\nee)\)填入的位置进行分讨。新开一段后面填入的数都比\(i\)大(如果存......
  • LeetCode刷题-队列
    一:队列的基本操作1、先进先出;入队和出队、类似与排队2、单端队列3、队列的常见操作#在python中使用deque创建队列importcollectionsimportdequeduilie=deque()#创建队列defadd(nums):duilie.append()#给队列添加元素defpeek():returnduilie[0]#查看队首......
  • 【VMware VCF】删除 SDDC Manager 中的失败任务。
    VMwareCloudFoundation中执行某些任务的时候,也许会因为配置错误或者环境原因导致子任务失败进而导致整个任务失败,你可以通过修正后重新启动该任务使其执行成功,不过有些任务可能不支持你重新启动。最终,这些失败的任务会一直显示在SDDCManager任务视图当中,如下图所示。这对......
  • 3292. 称检测点查询 来源:第二十次CCF-CSP计算机软件能力认证 枚举 排序
    #include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;constintN=210;pair<int,int>p[N];intn,X,Y;intmain(){cin>>n>>X>>Y;for(inti=1;i<=n;i++){......
  • 3293. 风险人群筛查 来源:第二十次CCF-CSP计算机软件能力认证 模拟枚举
    #include<iostream>#include<cstring>#include<algorithm>#definexfirst#defineysecondusingnamespacestd;intn,k,t,x1,y1,x2,y2;intmain(){cin>>n>>k>>t>>x1>>y1>>x2......
  • 洛谷刷题之P1046
    [NOIP2005普及组]陶陶摘苹果题目描述陶陶家的院子里有一棵苹果树,每到秋天树上就会结出101010个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个......
  • 洛谷刷题之P1009
    [NOIP1998普及组]阶乘之和题目描述用高精度计算出S=1!+2......
  • 洛谷刷题之P1226
    【模板】快速幂题目描述给你三个整数a,b,pa,b,p......
  • CF1941场题解
    RudolfandtheTicket算法:枚举。题意简述:从\(a\)数组中和\(b\)数组中各选出一个数,使得它们的和不超过\(k\),求选法数量。考虑直接枚举每一种可能的搭配即可。Rudolfand121算法:贪心。题意简述:定义一次操作为,该位置上的数减去\(2\),其前一个和后一个位置(必须存在)上的数......
  • CF1316F sol
    简化题意传送门定义一个长度为\(n\)的权值\(val(p)=\sum\limits_{i=1}^{n-1}p^{'}_ip^{'}_{i+1}\),其中\(p^{'}\)为\(p\)排序后的序列。特殊的,如果\(n\le1\),\(val(p)=\text{0}\)现在给定长度为\(n\)一个序列\(a\),\(a\)的所有子序列\(a^{'}\)的\(val(a^{'})\)的\(\......