首页 > 其他分享 >Codeforces Round 996 (Div. 2) (A - C)

Codeforces Round 996 (Div. 2) (A - C)

时间:2025-01-13 23:00:11浏览次数:3  
标签:tmp 996 题意 int void Codeforces cin vector Div

A题

链接:https://codeforces.com/contest/2055/problem/a

题意:两个人Alice和Bob初始位置分别位a,b,n为长度大小,Alice先手选择一个方向前进,两人位置不重叠且一次走一格,谁不能走谁输

解题思路:看他们两个谁先不能朝着对方位置前进,即为输

void smoking()
{
    int n, a, b;
    cin >> n >> a >> b;
    if (abs(a - b) & 1)
        cout << "NO\n";
    else
        cout << "YES\n";
}

B题

链接:https://codeforces.com/contest/2055/problem/b

题意:有n种材料,第i种有a[i]个,如果第i种不够,可以a[i] ++,然后除第i种以外每种 - 1,问最终可不可以符合要求

解题思路:如果a[i] < b[i],那么就记录他们的差值c[i],并记录总和tmp,最后将a[i]变为a[i]和b[i]中较大的数,再令a[i] 加上除它本身外的tmp,即a[i] += tmp - c[i];如果a[i] < b[i]则说明肯定不符合要求

样例
4
0 5 5 1
1 4 4 0
那么
c:-1 0 0 0
tmp -1
那么更新后的a
a[1] = -1 - (-1) + 1
a[2] = -1 - 0 + 5
a[3] = -1 - 0 + 5
a[4] = -1 - 0 + 1
void smoking()
{
    int n;
    cin >> n;
    vector<int> a(n + 1), b(n + 1), c(n + 1);
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    for (int i = 1; i <= n; ++i)
        cin >> b[i];
    int tmp = 0;
    for (int i = 1; i <= n; ++i)
    {
        if (a[i] < b[i])
        {
            c[i] = a[i] - b[i];
            tmp += c[i];
        }
    }
    for (int i = 1; i <= n; ++i)
    {
        a[i] = tmp - c[i] + (a[i] > b[i] ? a[i] : b[i]);
        // cout << a[i] << ' ' << b[i] << '\n';
        if (a[i] < b[i])
        {
            cout << "NO\n";
            return;
        }
    }
    cout << "YES\n";
}

C题

链接:https://codeforces.com/contest/2055/problem/C

题意:给n行m列数,一串字符s(仅包含D和R且length <= n + m - 2),D代表向下,R代表向上,从(1,1)开始,给途径的数赋值(初始为0),求最终令每行每列都相等的数组

解题思路:没指定必须等于的数,那么就令x = 0,那么问题就变成了在路径中,将接下来没改变的数的和的倒数赋值给当前数,例如

3 3
DRRD
0 2 3
0 0 0
3 1 0
那么从(1,1)开始,下一步是D,则不确定下数,即向右查看,遍历一行,a[1][1] -= sum;即a[1][1] = -5
那么(2, 1),则是遍历一列,即a[2][1] = 2;
以此类推
void smoking()
{
    int n, m;
    cin >> n >> m;
    string s;
    cin >> s;
    vector<vector<int>> a(n + 1, vector<int>(m + 1));
​
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
            cin >> a[i][j];
    }
    int i = 1, j = 1;
    while (i + j <= n + m)
    {
        if (s[i + j - 2] == 'D' || i + j == n + m)
        {
            int res = 0;
            for (int x = 1; x <= m; ++x)
            {
                res -= a[i][x];
            }
            a[i][j] = res;
            i++;
        }
        else
        {
            int res = 0;
            for (int x = 1; x <= n; ++x)
            {
                res -= a[x][j];
            }
            a[i][j] = res;
            j++;
        }
    }
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
        {
            cout << a[i][j] << " \n"[j == m];
        }
    }
}

标签:tmp,996,题意,int,void,Codeforces,cin,vector,Div
From: https://blog.csdn.net/2301_80078630/article/details/145125887

相关文章

  • Codeforces Round 734 (Div. 3) 题解
    建议开题顺序:A,B1,B2,C,E,F,D1,D2。A.PolycarpandCoins记\(k=\min(c1,c2)\),则\((c1-k)\times1+(c2-k)\times2+k\times3=n\)。注意到\(n\mod3\)为\(0,1,2\)。所以我们\(|c1-c2|\)最多为\(1\),只需要将\(n\mod3\)给\(1\)或\(2\)即可。B1.WonderfulColo......
  • vp Codeforces Round 986 (Div. 2)
    A.Alice'sAdventuresin"Chess"题意:你从(0,0)出发,重复固定的移动路径,问能不能经过(a,b)。直接跑一百次就行,因为ab都很小(其实只要跑20次)。点击查看代码voidsolve(){intn,a,b;std::cin>>n>>a>>b;intx=0,y=0;std::strings;std:......
  • CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!) B. Friendly Arrays
    Codeforces题解-[B.FriendlyArrays]题目链接题目描述Youaregiventwoarraysofintegers—\(a_1,\ldots,a_n\)oflength\(n\),and\(b_1,\ldots,b_m\)oflength\(m\).Youcanchooseanyelement\(b_j\)fromarray\(b\)(\(1\leqj\leqm......
  • cf-800 a b c:https://codeforces.com/contest/1694
    cf-800链接:https://codeforces.com/contest/1694题a正常循环输入01,多的最后输入就行你要的代码在这里usingnamespacestd;typedeflonglongll;intmain(){intu;cin>>u;while(u--){inta,b;cin>>a>>b;into=abs(a-b);......
  • 【区间合并+贡献法】codeforces 1789 C. Serval and Toxel's Arrays
    题目https://codeforces.com/problemset/problem/1789/C题意第一行输入一个正整数\(T(1\leqT\leq10^4)\),代表\(T\)组测试用例。对于每组测试用例:第一行输入两个正整数\(n,m(1\leqn,m\leq2\times10^5)\),分别代表要输入的数组长度和修改次数。第二行输入一个长......
  • VP Codeforces Round 995 (Div. 3)
    A.PreparingfortheOlympiad题意,有两个数组a和b,如果你选了a数组中第i个,那么对手获得b数组第i+1个,求你们得分的差值最大。直接加上所有ai>bi+1的就行。点击查看代码voidsolve(){intn;std::cin>>n;std::vector<int>a(n),b(n);for(inti=0;......
  • CodeForces Edu171
    PerpendicularSegmentsCodeForcesLinkDifficulty:900#include<bits/stdc++.h>usingnamespacestd;intt,x,y,k;intmain(){ios::sync_with_stdio(false);cin.tie(NULL),cout.tie(NULL);cin>>t;while(t--){cin>>x>......
  • CF div2 994 (A~E)
    VP赛时三题,自我感觉发挥不错,唯一不满意的地方在于D题完全没有思路。A答案最多为2,因为最坏情况即为先将整个区间合并为一个数,若这个数不是0,则再将这个数变为0。所以3种情况分类讨论即可:全是0,则不需要操作->\(0\)只有一段非\(0\)连续区间->\(1\)不止\(1\)个非\(0\)连续区......
  • 移民统计年鉴(1996-2021年)-社科数据
    移民统计年鉴(1996-2021年)-社科数据https://download.csdn.net/download/paofuluolijiang/90028564https://download.csdn.net/download/paofuluolijiang/90028564移民统计年鉴(1996-2021年)提供了一个全面的视角,以了解全球移民趋势和数据。这份年鉴详细记录了每年的全球移民......
  • VP Codeforces Round 994 (Div. 2)
    A.MEXDestruction题意:给你一个数组,每次操作选择一个区间使这个区间变为区间mex,问最少操作使得数组全为0.容易发现,对任意一个区间,最多两次操作这个区间就会全变成0,于是我们想尽可能操作大的区间。但并不是直接操作整个数组一定更好,如果我们选择的区间里没有0,那么只需要一次操......