首页 > 其他分享 >2024牛客暑假多校第四场补题

2024牛客暑假多校第四场补题

时间:2024-04-17 20:37:21浏览次数:27  
标签:第四场 matrix int 多校 long vector 补题 include op

B

每个堆的石子最多操作a[i]-1次

#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <algorithm>
#include <iomanip>
using namespace std;
int main()
{
    std::ios_base::sync_with_stdio(false);

    long long n;

    cin >> n;
    vector<long long> nums(n);
    long long ans = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> nums[i];
        ans += nums[i] - 1;
    }
    if (ans % 2 == 0)
        cout << "sweet" << endl;
    else
        cout << "gui" << endl;

    return 0;
}

C

模拟

#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <algorithm>
#include <iomanip>
using namespace std;

struct options
{
    int op, z;
};

void printMatrix(const vector<vector<char>> &matrix)
{
    for (const auto &row : matrix)
    {
        for (char c : row)
        {
            cout << c << ' ';
        }
        cout << endl;
    }
    cout << endl; // 空一行,方便观察
}

void rotateRow(vector<vector<char>> &matrix, int row)
{
    char temp = matrix[row].back();
    for (int i = matrix[row].size() - 1; i > 0; i--)
    {
        matrix[row][i] = matrix[row][i - 1];
    }
    matrix[row][0] = temp;
    // printMatrix(matrix); // 打印旋转后的矩阵
}

void rotateCol(vector<vector<char>> &matrix, int col)
{
    char temp = matrix.back()[col];
    for (int i = matrix.size() - 1; i > 0; i--)
    {
        matrix[i][col] = matrix[i - 1][col];
    }
    matrix[0][col] = temp;
    // printMatrix(matrix); // 打印旋转后的矩阵
}

int main()
{
    std::ios_base::sync_with_stdio(false);
    int n, m, x, y, p, q;
    cin >> n >> m >> x >> y;
    x--;
    y--; // 将索引转换为0-based
    vector<vector<char>> matrix(n, vector<char>(m));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> matrix[i][j];
        }
    }
    cin >> p >> q;
    vector<options> opts(p);

    for (int i = 0; i < q; i++)
    {
        int op, z;
        cin >> op >> z;
        z--; // 将索引转换为0-based
        opts[i] = {op, z};
    }

    for (int jk = 0; jk < p; jk++)
    {
        for (int i = 0; i < q; i++)
        {
            int op, z;
            op = opts[i].op;
            z = opts[i].z;
            if (op == 1)
            {
                rotateRow(matrix, z);
            }
            else if (op == 2)
            {
                rotateCol(matrix, z);
            }
        }
    }

    cout << matrix[x][y] << endl;
    return 0;
}

D

将这题看成看成一些积木块的堆积,进行的操作就是可以将任意一个积木块移动到任意的位置,也就是说,一共有sum个积木块的话,这个操作保证可以摆出所有的排列方式。

要求所有元素的最大公因数,设其为x,那么x一定也是sum的因数,那么sum的所有因数都可能被排列出来成为最小的那堆,或者是其更小的组成部分,那么只要满足\(x<=sum/n\)就是一个符合题意的方案,因此只需要对sum进行因数分解,然后筛选符合\(x<=sum/n\)的因数就可以了

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<long long> get_divisors(long long n)
{
    vector<long long> res;
    for (int i = 1; i <= n / i; i++) // i<=n/i绝对不会溢出
    {
        if (n % i == 0)
        {
            res.push_back(i);
            if (i != n / i)
            {
                res.push_back(n / i);
            }
        }
    }
    sort(res.begin(), res.end());
    return res;
}

int main()
{
    int n;
    cin >> n;

    vector<int> a(n);
    long long sum = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        sum += a[i];
    }
    auto yinzi = get_divisors(sum);
    long long ans = 0;
    for (int i = 0; i < yinzi.size(); i++)
    {
        if (yinzi[i] <= sum / n)
        {
            ans++;
        }
    }
    if (n == 1)
        cout << 1 << endl;
    else
        cout << ans << endl;
    return 0;
}

标签:第四场,matrix,int,多校,long,vector,补题,include,op
From: https://www.cnblogs.com/z4t15/p/18141690

相关文章

  • 天梯赛真题补题单(L2-1 ~ L2-4)
    L2-1点赞狂魔#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<LL,LL>PII;constLLN=200200,M=2020,INF=0x3f3f3f3f;LLn;structnode{strings;LLsum;}a[N];boolcmp(nodel,noder){if(l.sum!=r.sum)......
  • CodeForces Round #939(Div. 2) 补题记录(A~D)
    ABCD首先考虑:对于\(a\)数组的任意一段区间\([l,r]\),都总有一种办法可以让这些数字全部变成\(0\)。构造:若\([l,r]\)一段区间全部为\(0\),则已经达成条件。否则,将所有\(x\in[l,r]\cap\textbf{N}_+\)的\(a_x\neq0\),都让\([x,x]\)这一段区间取\(\text{mex}\)。......
  • 2024SMUSpring天梯4补题
    L2-3:用扑克牌计算24点题意:思路:全排列枚举ordfs得到全排列。枚举方式和"飞机降落"一样。题目类似"电阻组合"那题。要注意的是要枚举3种东西:数字的全排列,符号的全排列,以及!括号的情况!。一开始括号只是考虑到样例那种情况,wa两个点。括号会影响除法的计算。总的来说:枚举出全排列......
  • 天梯赛真题补题单(L1-6 ~ L1-8)
    L1-6整除光棍(思维题)#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<LL,LL>PII;constLLN=100200,M=2020;constdoublePI=3.141592;intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);LLT=1;......
  • 天梯赛真题补题单(L1-1 ~ L1-5)
    L1-1寻找250#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<LL,LL>PII;constLLN=100200,M=2020;constdoublePI=3.141592;intmain(){//cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);LLT=1;......
  • 2024/04/05 多校集训B层-省选模拟5
    T1魔法题面有\(n\)个小球排成一行,每个小球是红色或者蓝色。开始你被给定了两个非负整数\(R\)和\(B\)。每次你可以施展一个魔法,每次魔法你可以选择任意不同的\(R+B\)个球,将这些球全部变成白色,但是需要满足下列条件:你选择的\(R+B\)个球中,需要有恰好\(R\)个红球......
  • 2024/04/12 多校集训总结
    总结知识点线段树,平衡树,块状数据结构,字符串,网络流,DP,DP优化,数学。数据结构听懂得比较多,但是\(LCT\)还是没会,知道了扫描线的广泛应用,码力有小小的提升。字符串对于算法讲的很简略,主要就是讲一些题目,所以没学到啥,题目也没咋做。网络流的话,做了很多题,过程中自己......
  • 2024SMU蓝桥训练2补题
    C-密文搜索思路:不难。voidsolve(){//C--密文搜索可以不是字符串哈希--因为只需要知道相同长度字符串对字母出现情况,可以对字符串进行!!!排序!!!stringstr;cin>>str;intn,ans=0;cin>>n;unordered_map<string,int>mp;for(inti=1;i<=n;i++){......
  • 2024.4.9 图论补题
    P3225[HNOI2012]矿场搭建如果没有割点,至少需要建立两个出口如果只有一个割点,只需要设立一个出口如果有两个及以上个割点,则无需建立,可以直接到达其他联通块#include<cmath>#include<queue>#include<cstdio>#include<vector>#include<cstdlib>#include<cstring>#include......
  • 2024.4.8 数据结构课件补题
    [AGC055B]ABCSupremacy令ABC分别为1,2,3,然后令\(s_i=(s_i-i)\textmod3\)且结果大于0。然后可以发现三种组合均为连贯的三个相同数。且可以自由移动。可以选择每遇到三个相同数就删掉,或者不断加入栈,如果栈顶三个数相同全部弹出。再比较剩下的数即可。#include<bits......