首页 > 其他分享 >7/12 训练笔记

7/12 训练笔记

时间:2024-07-12 20:09:07浏览次数:19  
标签:mmax 12 cout 训练 int rep cin 笔记 mex

闲话

打 OI Bingo 然后大力卡时卡空间,贺了最优解之后成功 Bingo.
rep (i, 0, (int)v.size() - 1) v.push_back(1);在 vector v 本来就有内容的情况下会持续循环。
rep (i, 1, n) rep (i, 1, n) cin >> a[i];似乎会出问题。

P4137 Rmq Problem / mex

回滚莫队题,莫队笔记
考虑 mex 在删除时是好维护的:维护一个 cnt 数组,删空了就和 mex 比一下哪个小,然后更新。
但是添加不好做,所以使用回滚莫队。
代码:

#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i++)
using namespace std;
int B;
int a[200010], b[200010], bel[200010], cnt[200010], cnt1[200010], ans[200010], st[1010], res[1010], n, m, mex;
int id(int x) {
    return bel[x];
}
struct query {
    int l, r, id1;
    query(int l = 0, int r = 0, int id1 = 0):l(l), r(r), id1(id1) {}
    bool operator<(query o) {
        return (id(l) != id(o.l)) ? id(l) < id(o.l) : r > o.r;
    }
    query operator=(query o) {
        l = o.l;
        r = o.r;
        id1 = o.id1;
        return *this;
    }
}q[200010];
void del(int x) {
    cnt[x]--;
    if (!cnt[x]) mex = min(mex, x);
}
int bruteForce(int l, int r) {
    int mex = 0;
    int mmin = 0x3f3f3f3f, mmax = 0;
    rep (i, l, r) {
        mmin = min(mmin, a[i]);
        mmax = max(mmax, a[i]);
    }
    rep (i, 0, mmax + 1) {
        cnt1[i] = 0;
    }
    rep (i, l, r) {
        cnt1[a[i]]++;
    }
    rep (i, 0, mmax + 1) {
        if (cnt1[i] == 0) {
            mex = i;
            break;
        }
    }
    return mex;
}
int main() {
    cin >> n >> m;
    B = sqrt(n);
    rep (i, 1, n) {
        cin >> a[i];
        bel[i] = (i - 1) / B + 1;
        if (!st[bel[i]]) st[bel[i]] = i;
        // cout << bel[i] << " ";
        cnt[a[i]]++;
    }
    // cout << "\n";
    rep (i, 1, m) {
        cin >> q[i].l >> q[i].r;
        q[i].id1 = i;
    }
    sort(q + 1, q + m + 1);
    // rep (i, 1, m) {
    //     cout << q[i].l << " " << q[i].r << "\n";
    // }
    mex = bruteForce(1, n);
    rep (i, 1, (n - 1) / B + 1) {
        res[i] = bruteForce(st[i], n);
        // cout << st[i] << " " << n << " " << bruteForce(st[i], n) << "\n";
    }
    // rep (i, 46, 83) {
    //     cout << a[i] << " ";
    // }
    // cout << "\n";
    // rep (i, 64, 97) {
    //     cout << a[i] << " ";
    // }
    // cout << "\n";
    int l = 1, r = n;
    rep (i, 1, m) {
        if (id(l) != id(q[i].l)) {
            l = st[id(q[i].l)];
            mex = res[id(l)];
            r = n;
            rep (i, 1, n) {
                cnt[a[i]] = 0;
            }
            rep (i, l, n) {
                cnt[a[i]]++;
            }
        }
        // cout << i << " " << l << " " << mex << "\n";
        if (id(q[i].r) != id(l)) {
            // if (q[i].l == 66) {
            //     cout << l << "\n";
            //     rep (i, 1, 10) {
            //         cout << cnt[i] << " ";
            //     }
            //     cout << "\n";
            //     cout << mex << "\n";
            // }
            while (r > q[i].r) del(a[r--]);
            int t = mex;
            // if (q[i].l == 51) cout << t << " " << l << " " << r << "\n";
            // if (q[i].l == 46 && q[i].r == 80) {
            //     cout << mex << " " << l << " " << r << "\n";
            //     rep (i, 0, 9) {
            //         cout << cnt[i] << " ";
            //     }
            // }
            int tl = l;
            while (l < q[i].l) del(a[l++]);
            ans[q[i].id1] = mex;
            if (q[i].l == 65) {
                // cout << "Here1\n";
                // cout << i << " " << mex << "\n";
            }
            // if (q[i].l == 66) {
            //     cout << "Here\n";
            //     cout << i << " " << mex << "\n";
            // }
            mex = t;
            l = tl;
            // rep (i, 1, n) {
            //     cnt[a[i]] = 0;
            // }
            rep (j, tl, q[i].l - 1) {
                cnt[a[j]]++;
            }
            // if (q[i].l == 51 && q[i].r == 83) {
            //     cout << "here\n";
            //     cout << tl << " " << q[i].l << "\n";
            //     rep (j, tl, q[i].l - 1) {
            //         cout << i << " " << a[i] << "\n";
            //     }
            // }
            // if (q[i].l == 51) {
            //     cout << l << " " << r << "\n";
            //     rep (i, 0, 9) {
            //         cout << cnt[i] << " ";
            //     }
            //     cout << "\n";
            // }
        } else {
            ans[q[i].id1] = bruteForce(q[i].l, q[i].r);
        }
    }
    rep (i, 1, m) {
        cout << ans[i] << "\n";
    }
}

P2558 [AHOI2002] 网络传输

进行一个规律的找。
发现序列实际上是这样构成的(省略了底数 \(k\),只写了指数):\(0, 1, 01, 2, 02, 12, 012, \dots\)。
那么可以发现每次就是加一个数然后把之前的东西连到这个数前面。
那么模拟就好了,__int128可过。

#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i++)
using namespace std;
void write(__int128 a) {
    if (a <= 9) {
        putchar(a + '0');
    } else {
        write(a / 10);
        putchar(a % 10 + '0');
    }
}
__int128 qpow(int x, int y) {
    __int128 a = 1;
    rep (i, 1, y) {
        a *= x;
    }
    return a;
}
int k, p;
__int128 ans;
vector<vector<int> > v;
void calc() {
    for (auto i:v.back()) {
        ans += qpow(k, i);
    }
    write(ans);
}
int main() {
    cin >> k >> p;
    p--;
    if (p == 0) {
        cout << 1 << "\n";
    } else {
        v.push_back({0});
        int cnt = 1;
        while (p) {
            v.push_back({cnt});
            p--;
            if (!p) {
                calc();
                return 0;
            }
            vector<int> v1;
            // cout << "[" << p << " " << v.size() << "]\n";
            int sz = v.size() - 2;
            rep (i, 0, sz) {
                v1.clear();
                v1 = v[i];
                v1.push_back(cnt);
                v.push_back(v1);
                p--;
                if (!p) {
                    calc();
                    return 0;
                }
            }
            // cout << p << " ";
            // for (auto i:v.back()) {
            //     cout << i << " ";
            // }
            // cout << "\n";
            cnt++;
        }
    }
}

P2673 《瞿葩的数字游戏》T1-数字王国的门神

结论为:答案是 \(\frac{10}{89}\) 的第 \(M\) 至第 \(N\) 位小数。
生成函数应该能把这个推出来吧。

#include <stdio.h>
int m, n, a = 1, b = 89;
int main() {
    scanf("%d%d", &m, &n);
    for (int i = 1; i <= n + 1; i++) {
        a %= b;a *= 10;
        if (i >= m + 1) {
            printf("%d", a / b);
        }
    }
}

标签:mmax,12,cout,训练,int,rep,cin,笔记,mex
From: https://www.cnblogs.com/IANYEYZ/p/18299307

相关文章

  • 7-12 训练记
    今日训练总结回滚莫队(https://www.luogu.com.cn/problem/P4137)难点:代码中出现了许多小问题,调试过程耗时较长。解决方法:通过调试较大的数据并成功找到问题。找到出错且数据较小的询问,逐步调试。对于莫队这种在询问间转移答案的算法,找到一组出错询问及其之前的处理询问,便......
  • ExtJS中layout的12种布局风格
    extjs的容器组件都可以设置它的显示风格,它的有效值有absolute,accordion,anchor,border,card,column,fit,formandtable. 一共9种。另外几种见: http://www.sencha.com/deploy/dev/examples/layout-browser/layout-browser.html 里面有详细的例子。 ·  absol......
  • 第五天笔记(svn使用,)
    创建仓库......
  • Activity工作流引擎学习笔记(一)
    工作流的概念  工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。工作流管理系统(WorkflowManagem......
  • AI预测福彩3D采取888=3策略+和值012路或胆码测试7月12日新模型预测第32弹
             今天咱们继续验证新模型的8码定位=3,重点是预测8码定位=3+和值012+胆码。有些朋友看到我最近几篇文章没有给大家提供缩水后的预测详情,在这里解释下:其实我每篇文章中既有8码定位,也有和值012路,也有胆码排序,这些条件如果命中的话,其实大家完全可以自行使用一些免......
  • AI预测体彩排3采取888=3策略+和值012路或胆码测试7月12日升级新模型预测第27弹
            根据前面的预测效果,我对模型进行了重新优化,因为前面的模型效果不是很好。熟悉我的彩友比较清楚,我之前的主要精力是对福彩3D进行各种模型的开发和预测,排三的预测也就是最近1个月才开始搞的。3D的预测,经过对模型的多次修改和完善,最新的模型命中率有了大幅提高,大......
  • remake 前的训练记录
    2024.7.9cf1989赛时通过abcd,补了e。E对于原数组的一段元素相同的区间,会对应到b数组形如\([1,2,\cdots,x-1,x,x,x-1,\cdots,2,1]\)或者\([1,2,\cdots,x-1,x,x-1,\cdots,2,1]\)的区间。所以只需要求长度为\(n\)的序列能被切成至少\(k\)段的方......
  • 搞懂清结算,只需要记住“123457”
    搞懂清结算其实总结起来就是1234567七个数字。怎么理解?我们来看看分享。前几天看了一篇万字长文,深度解析了支付机构的清结算账务处理原理。总结起来就是“1张图、2条线、3在途、4段数、5账户、7环节”,6去那了,大家可以找找,其中 1张图就是这样一张极简图,基本阐述了整个清结......
  • 2024 暑假训练记录
    2024暑假集训记录Day1-7.7cszhpdx生日快乐!教练发了2015BJJLHN省队集训,大概把BJ的题顺了一遍,感受是十年前的题目都好板啊...ppt还没来得及看,只简单看了几个2015BJ省队集训Day2-7.82021.8.30-2024.7.8继续看BJ省队集训题,写题解。发现即使很板,但是......
  • protobuf-net.Grpc 笔记
    众所周知,Grpc很好用,但每次都需要手动编写*.proto文件,protobuf-net.Grpc个人感觉最大的优势是不用写*.proto文件,相关教程如下:https://learn.microsoft.com/zh-cn/aspnet/core/grpc/code-first?view=aspnetcore-8.0https://protobuf-net.github.io/protobuf-net.Grpc/gettingst......