首页 > 其他分享 >YACS2023年7月乙组

YACS2023年7月乙组

时间:2023-08-09 13:00:13浏览次数:32  
标签:const int 乙组 operator return mod mint YACS2023

T1:树的计数

注意到,深度为 \(2\) 的点一定是深度为 \(1\) 的点的儿子节点,深度为 \(3\) 的点一定是深度为 \(2\) 的点的儿子节点.....那么深度为 \(i\) 的点可以是深度为 \(i - 1\) 的儿子节点,对于此题是一个经典的分步乘法计数原理,把深度为 \(2\) 的儿子节点确定下来是第一步,深度为 \(3\) 的儿子节点确定下来是第二步......

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)

using namespace std;
using ll = long long;

//const int mod = 998244353;
const int mod = 1000000007;
struct mint {
    ll x;
    mint(ll x=0):x((x%mod+mod)%mod) {}
    mint operator-() const {
        return mint(-x);
    }
    mint& operator+=(const mint a) {
        if ((x += a.x) >= mod) x -= mod;
        return *this;
    }
    mint& operator-=(const mint a) {
        if ((x += mod-a.x) >= mod) x -= mod;
        return *this;
    }
    mint& operator*=(const mint a) {
        (x *= a.x) %= mod;
        return *this;
    }
    mint operator+(const mint a) const {
        return mint(*this) += a;
    }
    mint operator-(const mint a) const {
        return mint(*this) -= a;
    }
    mint operator*(const mint a) const {
        return mint(*this) *= a;
    }
    mint pow(ll t) const {
        if (!t) return 1;
        mint a = pow(t>>1);
        a *= a;
        if (t&1) a *= *this;
        return a;
    }

    // for prime mod
    mint inv() const {
        return pow(mod-2);
    }
    mint& operator/=(const mint a) {
        return *this *= a.inv();
    }
    mint operator/(const mint a) const {
        return mint(*this) /= a;
    }
};
istream& operator>>(istream& is, mint& a) {
    return is >> a.x;
}
ostream& operator<<(ostream& os, const mint& a) {
    return os << a.x;
}

int main() {
    int n;
    cin >> n;
    
    map<int, int> mp;
    rep(i, n) {
        int d;
        cin >> d;
        mp[d]++;
    }
    
    mint ans = 1;
    for (auto [d, x] : mp) {
        if (d == 1) continue;
        ans *= mint(mp[d-1]).pow(x);
    }
    
    cout << ans << '\n';
    
    return 0;
}

T2:套娃

本质上就是 LC354. 俄罗斯套娃信封问题,唯一的不同点在于 不超过

代码实现
#include <bits/stdc++.h>
#define int long long
#define rep(i, n) for (int i = 0; i < (n); ++i)

using namespace std;
using P = pair<int, int>;

signed main() {
    int n;
    cin >> n;
    
    vector<P> ps;
    rep(i, n) {
        int a, b;
        cin >> a >> b;
        ps.emplace_back(a, b);
    }
    
    sort(ps.begin(), ps.end());
    
    vector<int> dp{ps[0].second};
    for (int i = 1; i < n; ++i) {
        if (int x = ps[i].second; x >= dp.back()) {
            dp.push_back(x);
        }
        else {
            auto it = upper_bound(dp.begin(), dp.end(), x);
            *it = x;
        }
    }

    cout << dp.size() << '\n';
    
    return 0;
}

T3:订单安排

对于当前一些订单已经延迟的人,肯定是希望把不悦值最大的人先完成,每次完成需要一分种,也就是说每一次完成一个人的订单后会有一个新的人订单延迟,那么将此新人加入进来后需要重新求不悦值最大的人,使用大根堆可以在 \(\mathcal{O}(\log n)\) 的时间内完成此操作。

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)

using namespace std;
using ll = long long;

int main() {
    int n, m;
    cin >> n >> m;
    
    vector<int> a(n);
    rep(i, n) cin >> a[i];
    
    ll ans = 0, tot = 0;
    priority_queue<int> q;
    rep(i, n+m) {
        if (i < n) {
            q.push(a[i]);
            tot += a[i];
        } 
        if (i >= m) {
            int x = q.top(); q.pop();
            tot -= x;
        }
        ans += tot;
    }
    
    cout << ans << '\n';
    
    return 0;
}

标签:const,int,乙组,operator,return,mod,mint,YACS2023
From: https://www.cnblogs.com/Melville/p/17616577.html

相关文章

  • YACS2022年10月乙组
    T1:录制节目可以将原题转化成有\(n\)条线段,可以保留若干条线段,并且可以分成两部分,使得每部分的线段互不相交先将所有线段按右端点做升序排序,且按左端点做降序排序然后维护两个变量last1和last2last1:第一个部分的最后的端点last2:第二个部分的最后的端点尽量让\(\min(......
  • YACS2023年2月乙组
    T3:最大子集本题是01背包的变种题记dp[i]表示选到的奶牛的智商总和为\(i\)时对应的情商总和的最大值这里由于\(x\)可能是负数,所以需要将\(i\)向后偏移\(3e5\)......
  • YACS2023年2月丙组
    T1:格式改写代码实现s=input()cnt=0forcins:ifc.isupper():cnt+=1ans=min(cnt,len(s)-cnt)print(ans)T2:倍数统计代码实......
  • YACS 2023年1月月赛 乙组 T4 加与乘(二) 题解
    题目链接应大家的要求,早上起来更一下乙组T4。这一道题目我们发现不仅会加元素了,还会重复执行任务。很容易想到用两个树状数组来维护每个任务的执行次数,以及每个单元格......
  • YACS2023年1月乙组
    T1:无限延展见P3612[USACO17JAN]SecretCowCodeS代码实现#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intmain(){ strings;llk;......
  • YACS2023年1月丙组
    T3:找零对于\(20\)块,优先找\(10+5\),其次是\(5+5+5\)代码实现#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<(n);++i)usingnamespacestd;......
  • YACS 2022年12月月赛 乙组 T1 拼接单词 题解
    一道结论题,代码相当的短。我们先来考虑会拼出重复的情况:那必定是第一个字符串里有一个$a$(其他的也行),第二个也有一个$a$。那么我们就可以选择拿第一个字符串$a$前面的......
  • YACS 2022年12月月赛 乙组 T2 八进制小数 题解
    纪念一下,两件事。$1.$打$YACS$一年了,时间过得好快啊。$2.$第一次$AK$乙组。高精板子。$8$进制转十进制,很简单。小数部分第一位的数字乘上$8^{-1}$,第二位就乘上......
  • YACS 2022年11月月赛 乙组 T3 菜单设计 题解
    题目链接上完编程课回来的深夜,更一篇吧。这一题一看数据范围$:18$,阶乘暴力打不了,就是状压。其实我还是比较喜欢状压的,不过这几个月怎么这么多状压?首先:设计状态不难发......
  • YACS 2022年11月月赛 乙组 T1 数对统计 题解
    好久没更了,闲话一句,我的初赛成绩只有$71.5$,$76$才能进$NOIP$,所以就更一篇吧首先先考虑暴力算法,枚举两个数,设这两个数为$x$和$y$,如果$f[x][y]=false$,那就标记为$t......