首页 > 其他分享 >Codeforces Round 837题解(A、B)

Codeforces Round 837题解(A、B)

时间:2024-06-10 14:33:22浏览次数:21  
标签:pq 837 min int 题解 ans Codeforces bag max

A. Hossam and Combinatorics

\(|a_i - a_j|\)最大的就是最大值和最小值,注意要开long long

int n;
int a[N];
 
void solve() {
    cin >> n;
    int min_v = INF, max_v = 0;
    for (int i = 1; i <= n; i ++) {
        cin >> a[i];
        min_v = min(min_v, a[i]);
        max_v = max(max_v, a[i]);
    }
    int cnt_min = 0, cnt_max = 0;
    if (min_v == max_v) {
        cout << n * (n - 1) << '\n';
        return;
    }
    for (int i = 1; i <= n; i ++) {
        if (a[i] == min_v) cnt_min ++;
        if (a[i] == max_v) cnt_max ++;
    }
    cout << cnt_min * cnt_max * 2 << '\n';
}

B. Hossam and Friends

考虑对每一个\(l\),有那些\(r\)满足\([l, r]\)中的朋友都互相认识。

设共有\(m\)各互相不认识的对\((l, r)\),则所有小于\(l\ge\)当前枚举到的\(i\)的\((l, r)\)对中最小的\(r\)的下标都可以作为当前\(i\)的\(r\)。

那么我们开个优先队列维护即可。

 
int n, m;
vector<int> bag[N];
priority_queue<PII, vector<PII>, greater<>> pq;
 
void solve() {
    cin >> n >> m;
    for (int i = 1; i <= n; i ++) bag[i].clear();
    while (!pq.empty()) pq.pop();
    for (int i = 1; i <= m; i ++) {
        int l, r;
        cin >> l >> r;
        if (l > r) swap(l, r);
        bag[l].push_back(r);
    }
    int ans = 0;
    for (int i = n; i >= 1; i --) {
        for (auto j : bag[i]) pq.push({j, i});
        if (pq.empty()) {
            ans += n - i + 1;
            continue;
        }
        ans += pq.top().first - i;
    }
    cout << ans << '\n';
}

标签:pq,837,min,int,题解,ans,Codeforces,bag,max
From: https://www.cnblogs.com/lightmon5210/p/18240627

相关文章

  • Codeforces 800-1300 刷题笔记
    CF1946BMaximumSum这道题是一道贪心题。对于第\(1\)次操作,选择的话肯定是选最大的好,所以我们会找出原序列的最大子段和进行插入,为了使下一次的插入子段更大,所以我们一定会插入原序列的最大子段和中。进行\(m\)次操作,执行\(m\)次上述操作即可。直接模拟的话肯定不行,我们......
  • CF1970F1 Playing Quidditch (Easy) 题解
    一道大模拟题。这道题可以用一个 map 记录球员及鬼飞球当时的坐标,用一个数组 a 记录是否有人进球,用另一个数组 b 记录每位球员是否有鬼飞球。当球员抓住鬼飞球后,鬼飞球跟着这个球员移动,直到这个球员投球。话不多说,直接上代码。MyCode:#include<bits/stdc++.h>#de......
  • 【题解】 [CSP-J 2019] 纪念品
    题目描述题目大意在\(T\)天内,有\(n\)种纪念品和初始的\(m\)元。可以得到每天每种纪念品的价格。每一天可以以当日价格买卖纪念品。特别的,当天卖出得到的钱可以当天买入,当日买入的纪念品也可以当日卖出。当然可以一直持有。但是,\(T\)天过后,手上不可以持有纪念品。思路......
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 机场航班调度程序(100分) - 三语言A
    ......
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 最富裕的小家庭(100分) - 三语言AC
    ......
  • P7690 [CEOI2002] A decorative fence 题解
    cnblogs如果只是询问方案数,是P2467[SDOI2010]地精部落这道题,设\(f_{i,j,1/0}\)表示以\(j\)个数中从小到大的第\(i\)个数处于高/低位开头的方案数。显然有\[\begin{aligned}\begin{cases}f_{i,j,1}=\sum_{k=1}^{i-1}f_{k,j-1,0}\\f_{i,j,0}=\sum_{k=i}......
  • Codeforces Global Round 26 (A - D)
    CodeforcesGlobalRound26A如果\(a_1=a_n\),无解。如果\(a_2=a_n\),\(a_1,a_2\)涂成红色,否则只把\(a_1\)涂成红色。voidsolve(){ cin>>n; for(inti=1;i<=n;++i)cin>>a[i]; if(a[1]==a[n]){ cout<<"NO\n"; re......
  • C++题解——3320——竞选总统(信息学奥赛一本通)
    题目描述:小明想当Y国的总统,Y国大选是按各州的投票结果来确定最终的结果的,如果得到超过一半的州的支持就可以当选,而每个州的投票结果又是由该州选民投票产生的,如果某个州超过一半的选民支持小明,则他将赢得该州的支持。现在给出每个州的选民人数,请问小明至少需要赢得多少选民的......
  • [题解]P1967 [NOIP2013 提高组] 货车运输
    P1967[NOIP2013提高组]货车运输题意简述给定一个\(N\)个节点,\(M\)条边的无向图,其中每条边有一个边权。接下来给定\(q\)次询问。每次询问给出\(x,y\),请计算\(x\)到\(y\)路径上最小边权的最大值是多少。解题思路我们对于每个连通块跑一遍最大生成树。这样整张图就成了一片森......
  • 2024年新高考1卷精选试题解答
    **(2024年新高考1卷18题)**已知函数$f(x)=\ln\fracx{2-x}+ax+b(x-1)^{3}$.(1)若$b=0$,且$f'(x)\geqslant0$,求$a$的最小值;(2)证明:曲线$y=f(x)$是中心对称图形;(3)若$f(x)>-2$当且仅当$1<x<2$,求$b$的取值范围.**解.**函数$f(x)$的定义域为$(0,2)$.(1)若$b=0$,则$f\left......