首页 > 其他分享 >Codeforces Round 998 (Div. 3)

Codeforces Round 998 (Div. 3)

时间:2025-01-20 20:30:26浏览次数:3  
标签:cin int Codeforces 998 ++ ans Div st find

题目链接:Codeforces Round 998 (Div. 3)

总结:复建,Cwa两发,E读假题了。

A. Fibonacciness

tag:签到

Solution:简单模拟一下即可。

void solve(){
    int a[5];
    for (int i = 0; i < 5; i ++){
        if (i == 2){
            continue;
        }
        cin >> a[i];
    }
    a[2] = a[0] + a[1];
    int ans = 0;
    for (int i = 2;  i < 5; i ++){
        if (a[i] == a[i - 1] + a[i - 2])
            ans ++;
        else
            continue;
    }
    a[2] = a[3] - a[1];
    int ans2 = 0;
    for (int i = 2;  i < 5; i ++){
        if (a[i] == a[i - 1] + a[i - 2])
            ans2 ++;
        else
            continue;
    }
    cout << max(ans, ans2) << endl;
}

B. Farmer John’s Card Game

tag:签到

Solution:显然需要按顺序一个人一个人递增的出牌,将每个人的牌排序以后,模拟出牌顺序,看是否能够满足。

void solve(){
    int n, m;
    cin >> n >> m;
    vector<pii> ans(n);  // 
    set<int> a[n];

    for (int i = 0; i < n; i ++){
        ans[i].se = i;  // 每个人的位置
        for (int j = 0; j < m; j ++){
            int x;
            cin >> x;
            a[i].insert(x);
        }
        ans[i].fi = *(a[i].begin());  // 每个人最小的牌
    }

    sort(ans.begin(), ans.end());
    int t = 0;
    for (int j = 0; j < m; j ++)
        for (int i = 0; i < n; i ++){
            if (*(a[ans[i].se].begin()) == t){
                a[ans[i].se].erase(t);
                t ++;
            }
            else{
                cout << -1 << endl;
                return;
            }
        }

    for (int i = 0; i < n; i ++){
        cout << ans[i].se + 1 << " \n"[i + 1 == n];
    }
}

C. Game of Mathletes

tag:思维

Solution:得分是固定的,只要有两个数能够加起来等于K,那么b就能得分。

void solve(){
    int n, k;
    cin >> n >> k;
    vector<int> a(n);

    multiset<int> st;
    for (int i = 0; i < n; i ++){
        cin >> a[i];
        st.insert(a[i]);
    }
    sort(a.begin(), a.end());

    int ans = 0;
    for (int i = 0; i < n; i ++){
        if (st.size() == 0 || a[i] >= k)
            break;
        int b = k - a[i];
        if (st.find(a[i]) != st.end() && st.find(b) != st.end()){
            auto x = st.find(a[i]);
            st.erase(x);
            if (st.find(b) == st.end()){  // 当a == b时,避免RE
                st.insert(a[i]);
                continue;
            }
            auto y = st.find(b);
            st.erase(y);
            ans ++;
        }
    }

    cout << ans << endl;
}

D. Subtract Min Sort

tag:思维

Description:给定n个数,可以进行任意次操作,每次操作令 a i a_i ai​和 a i + 1 a_{i + 1} ai+1​同时减去 m i n ( a i , a i + 1 ) min(a_i, a_{i +1}) min(ai​,ai+1​)。问能否将原序列变为非递减序列。

Solution:从第一个数开始模拟,显然第一个数比第二个数大不行,否则我们让它们进行操作,则第一个数变为零,向后继续操作即可。

void solve(){
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i ++){
        cin >> a[i];
    }

    for (int i = 1; i < n; i ++){
        if (a[i - 1] > a[i]){
            cout << "NO\n";
            return;
        }
        a[i] -= a[i - 1];
    }

    cout << "YES\n";
}

E. Graph Composition

tag:并查集

Description:给定两个无向图F和G,可以对F操作:

  • 在u,v之间建一条边。
  • 删除一条u,v之间的边。
  • 求最小操作次数,使得F中u,v之间有一条路径,当且仅当G中u,v之间有一条路径。

Solution:建两个并查集f和g,将g中的点进行合并,首先枚举F中的边,如果两点在g中不属于同一个并查集则将它们删除,否则在f中合并它们。然后枚举g中的边,如图两点在同一个并查集中,则在f中将它们合并,记录操作次数。

Competing:将图看成了连通图。

void solve(){
    int n, m1, m2;
    cin >> n >> m1 >> m2;
    set<pii> a1, a2;
    DSU f(n + 1), g(n + 1);
    
    for (int i = 0; i < m1; i ++){
        int x, y;
        cin >> x >> y;
        if (x > y)
            swap(x, y);
        a1.insert({x, y});
    }

    for (int i = 0; i < m2; i ++){
        int x, y;
        cin >> x >> y;
        a2.insert({x, y});
        g.merge(x, y);
    }

    int ans = 0;
    for (auto [x, y] : a1){
        if (g.find(x) != g.find(y)){ // 必须删
            ans ++;
        }
        else{
            f.merge(x, y);
        }
    }

    for (auto [x, y] : a2){
        if (g.find(x) == g.find(y)){
            ans += f.merge(x, y);
        }
    }
    cout << ans << endl;
    
}

标签:cin,int,Codeforces,998,++,ans,Div,st,find
From: https://blog.csdn.net/MenghuanL/article/details/145268191

相关文章

  • CF div3 998(F,G)
    F\(dp\)+组合数学需要注意,数组中\(>1\)的数字个数不会超过\(log_{2}k\)个。先暂时不考虑\(1\)的摆放,只考虑所有\(>1\)的数:设\(f_{l,i}:\)长度为\(l\),乘积为\(i\),且所有元素均\(>1\)的数组个数考虑数组的最后一个元素\(d\),必有\(d|i\)成立,因为每个元素一定是\(i\)的因子。则......
  • Codeforces Round 897 (Div. 2)
    A.green_gold_dog,arrayandpermutation题意:给你一个数组\(a\),你要构造一个排列\(b\),使得不同的\(a_i-b_i\)尽可能多。我们按\(a_i\)从小到大分配\(n\)到\(1\),这样\(a_i-b_i\)一定大于\(a_j-b_j\)\((a_i>a_j)\)。点击查看代码voidsolve(){intn;std::cin>>n......
  • Codeforces Round 997 (Div. 2) / 2056
    A.ShapePerimeter难度(个人感觉)★☆☆☆☆思考:考虑平移Code:for(inti=0;i<N;i++){std::cin>>dx>>dy;if(i){cnt_dx+=dx;cnt_dy+=dy;}}ans=(m+cnt_dx+m+cnt_dy)*2;B.FindthePermutation难度(个人感觉)★☆☆☆☆思考......
  • 1998-2014年中国工业用水数据集
    中国工业用水数据集是根据全国各地单独报告的工厂级水资源信息汇编而成的。这种来自微观水平工厂报告的独特DGP的粒状数据不同于所有其他研究甚至官方统计中基于固定部门特定水密度的宏观水平估计。它包含了1,480,265个工厂每年的观察,提供了前所未有的细节和对水使用模式的洞察......
  • Codeforces Round 997 (Div. 2) 题解(A~D 题)
    CodeforcesRound997(Div.2)题解(A~D题)A因为\(x,y<m\),所以每次必有重叠的长方形。且重叠部分长为\(m-x\),宽为\(m-y\),用总周长减去算重了的部分就行。注意处理第一个长方形的边界条件。B.FindthePermutation按照\(g_{i,j}\)的大小关系直接写cmp然后sort就......
  • 【洛谷训练记录】【LGR-213-Div.4】洛谷入门赛 #31
    训练情况赛后反思模拟题差点红温,差一道字符串模拟题AKA题问一个数\(a\)加多少后的个位数变成\(b\),取出\(a\)的个位数,再用\(b\)去减,如果小于零答案再加十。#include<bits/stdc++.h>//#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve()......
  • 如何使用css3实现一个div设置多张背景图片?
    在CSS3中,你可以使用background-image属性为一个div设置多张背景图片。这些图片将按照它们在值列表中的顺序堆叠,第一张图片位于最前面(即最靠近用户),最后一张图片位于最后面。以下是一个示例:div{width:500px;height:500px;background-image:url(image1.jpg),url(image......
  • Educational Codeforces Round 149 (Rated for Div. 2) / 1837
    A.GrasshopperonaLine难度(个人感觉)☆☆☆☆☆Codeif(L%k==0){ans.push_back(1);ans.push_back(L-1);}else{ans.push_back(L);}B.ComparisonString难度(个人感觉)★☆☆☆☆思考:注意到最长链(指一些连续的位置,它们是单调的)是答案的下界,而实际上这是下......
  • Educational Codeforces Round 146 (Rated for Div. 2) / 1814
    A.Coins难度(个人感觉)☆☆☆☆☆思考:关键是2可以凑出任意偶数Code:if(n%2==0){ok=1;}else{if(k%2==0){ok=0;}else{ok=n>=k;}}B.LongLegs难度(个人感觉)★☆☆☆☆思考:当最终\(m=1e5\),答案不超过\(3e5\),因此最优的情况......
  • VP Codeforces Round 911 (Div. 2)
    A.CoverinWater题意:有n个格子,有些格子是好的,有些是坏的,你要给好格子都装上水,你可以花费一点价值让一个格子有水,也可以把一个格子的水移到另一个格子,没有花费。如果一个格子是好格子并且两边的格子都有水,这个格子就会自己填满水。问最少花费让所有好格子有水。容易想到,如果......