首页 > 其他分享 >2023牛客暑期多校训练营4

2023牛客暑期多校训练营4

时间:2023-09-08 15:02:19浏览次数:46  
标签:cout idx int ++ 多校 cin 牛客 2023 op

A.Bobo String Construction

题意:

给定一个01串t,构造一个长度为n的01串s,时的t + s + t中t只在首和尾出现。

分析:

结论,s取全0或者全1。
①假设t全0或者全1,那我s和t取相反的即可。
②假设t既包含0又包含1,首先t不可能是s的子串,那我们只需考虑t是否可以由t的后缀加上s再加上t的前缀得到。假设对于当前的串s全0且存在t的后缀加上s加上t的前缀等于t,那么我们将s变为全1一定满足。当前串s全为1同理。
综上,我们只需要分别判断s全为0和全为1即可。

代码:

#include <bits/stdc++.h>
using namespace std;

int check(string &s, string &s2) {
    int cnt = 0;
    for (int i = 0; i < s.size(); i ++) {
        if (s.substr(i, s2.size()) == s2)
            cnt ++;
    }
    return cnt;
}

int main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int t;
    cin >> t;
    
    while (t --) {
        int n;
        string s, s0, s1;
        cin >> n >> s;
        
        for (int i = 0; i < n; i ++) {
            s0 += '0';
            s1 += '1';
        }
        
        string s3 = s + s0 + s;
        
        if (check(s3, s) == 2)
            cout << s0 << endl;
        else
            cout << s1 << endl;
            
    }
    
    return 0;
}

F.Election of the King

题意:

有n个人竞选国王,\(a_i\)表示第i个人的从政理念,每轮通过投票淘汰一位竞选者,每个人将投给与自己从政理念相差最大的人。
票数最多的将被淘汰,如果票数相同淘汰值最大的,如果值相同则淘汰编号最大的。

分析:

由于每个人投的是与自己执政理念相差最大的人,因此每个人要么投给值最大的要么投给值最小的,最终的决定权将落在值中间的那个人。可以将所有人优先按值从小到大排序,若值相同则按编号从小到大排序,最后不断让中间那个来决定淘汰谁即可。

代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 5;
struct P {
    int a, id;
}p[N];

bool cmp(P &A, P &B) {
    if (A.a != B.a) 
        return A.a < B.a;
    else 
        return A.id < B.id;
}

int main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i ++) {
        cin >> p[i].a;
        p[i].id = i;
    }
    
    sort(p + 1, p + 1 + n, cmp);
    
    int l = 1, r = n;
    while (l < r) {
        int mid = l + r >> 1;
        
        if (abs(p[mid].a - p[l].a) > abs(p[mid].a - p[r].a))
            l ++;
        else if (abs(p[mid].a - p[l].a) < abs(p[mid].a - p[r].a))
            r --;
        else {
            r --;
        }
    }
    
    cout << p[l].id;
    
    return 0;
}

J.Qu'est-ce Que C'est?

题意:

给定n和m,求能构造出满足下面条件的序列的数量。
①每个数在[-m, m]的范围内
②任意长度大于等于2的区间和>=0

分析:

考虑dp。
状态定义:f[i][j]表示前i个数中后缀最小值为j的方案数。
状态转移:
①j >= 0,能够转移过来的前一个状态后缀最小值的下限为j - m,因此f[i][j] = \(\sum_{k = j - m}^m f[i - 1][k]\)
②j < 0,由于要满足长度大于2的区间和>=0,所以最小后缀只有可能是第i个数自己,能够转移过来的前一个状态后缀最小值的下限即为-j, 因此f[i][j] = \(\sum_{k = -j}^m f[i - 1][k]\)
答案即为:\(\sum_{j = -m}^m f[n][j]\)

代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 5010, M = 10010, mod = 998244353;
int f[N][M], s[N][M]; // s优化求和部分

int main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int n, m;
    cin >> n >> m;
    
    for (int i = 2 * m; i >= 0; i --) {
        f[1][i] = 1;
        s[1][i] = s[1][i + 1] + 1;
    }
    
    for (int i = 2; i <= n; i ++) {
        for (int j = -m; j <= m; j ++) {
            if (j < 0) {
                f[i][j + m] = s[i - 1][-j + m];
            } else {
                f[i][j + m] = s[i - 1][j - m + m];
            }
        }
        
        // 优化求和
        for (int j = m; j >= -m; j --) {
            s[i][j + m] = (s[i][j + m] + s[i][j + m + 1] + f[i][j + m]) % mod;
        }
    }
    
    cout << s[n][0];
    
    return 0;
}

L.We are the Lights

题意:

n × m的灯阵,初始全灭。每次操作可将某一行或者某一列的灯全开/全关。问q次操作过后有多少台灯亮着。

分析:

可以发现只有最后一步才决定灯的状态,因此我们可以倒着去维护亮着灯的数量。

代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 5;
typedef long long LL;
bool row[N], col[N];
struct Q {
    string s, op;
    int idx;
}q[N], q2[N];
LL cnt, cntr, cntc;

int main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int n, m, t;
    cin >> n >> m >> t;
    
    for (int i = 0; i < t; i ++) {
        string s, op;
        int idx;
        cin >> s >> idx >> op;
        
        q[i] = {s, op, idx};
    }
    
    for (int i = t - 1; i >= 0; i --) {
        string s = q[i].s, op = q[i].op;
        int idx = q[i].idx;
        
        if (s == "row" && !row[idx]) {
            row[idx] = true;
            q2[cnt ++] = {s, op, idx};
        } else if (s == "column" && !col[idx]) {
            col[idx] = true;
            q2[cnt ++] = {s, op, idx};
        }
    }
    
    LL res = 0;
    
    for (int i = cnt - 1; i >= 0; i --) {
        string s = q2[i].s, op = q2[i].op;
        int idx = q2[i].idx;
        
        if (s == "row") {
            if (op == "on") {
                res += (m - cntc);
                cntr ++;
            } else {
                if (res > 0)
                    res -= cntc;
            }
        } else if (s == "column") {
            if (op == "on") {
                res += (n - cntr);
                cntc ++;
            } else {
                if (res > 0)
                    res -= cntr;
            }
        }
    }
    
    cout << res;
    
    return 0;
}

标签:cout,idx,int,++,多校,cin,牛客,2023,op
From: https://www.cnblogs.com/scoxty/p/17685929.html

相关文章

  • 2023/09/08
    问题:在HYS项目中,主要工作是,从正式库中通过脚本将表结构等创建到备库中,但是在备库中建表的时候,速度特别慢,创建一张表需要七八分钟,不正常。问题排查:(1)首先通过命令iostat和top指令来查看当前服务器中的io写入和cpu使用率。结果发现都正常。接着在isql中手动创建一张表发现速度依然很......
  • 世和基因亮相2023服贸会,中国精准检测技术走向世界
    9月6日,2023中国国际服务贸易交易会在北京圆满收官,本届服贸会围绕“开放引领发展,合作共赢未来”年度主题,吸引了全球领先的创新技术和科研成果亮相盛会,累计入场近28万人。作为国内肿瘤精准医学头部企业,世和基因受邀参展,并以“立足中国,服务全球”为主题,亮相健康卫生服务专题展区。众多......
  • WC / CTS 2023
    没做通信和poly。*loj3928.「CTS2023」琪露诺的符卡交换tag:正则二分图的完美匹配,构造。把卡片看成\(n\timesn\)的矩阵,我们的目标是交换一些方格使得每一行都是一个排列。考虑把所有列都换成排列,然后把矩阵转置。那么假设已经确定了前\(k\)列,要确定第\(k+1\)列,问题相......
  • 2023.9.8——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午数学建模比赛,下午数学建模比赛+上课。我了解到的知识点:1.学习使用excel的vlookup函数其具体使用方式为:【公式】->【插入函数】第一行代表需要搜索的值;第二行代表搜索的区域;第三行代表返回匹配值是哪一列;第四行输......
  • idea2023.2版本配置tomcat
    1,首先确保tomcat已经配置好,运行正常2,打开idea,右键项目,找到addframesupport(添加框架结构),我这里没有,所以我是在help,findaction搜索addframesupport(注意要先点击选中项目)  4,找到选中即可,勾选web.appliction 出现如图所示即可 5,添加java文件存放的地方classes......
  • wzOI 2023.8.24 模拟赛(附树的直径和三分法)
    2023-08-2815:53:53$$A$$典型错误一知半解看样例型:如果该队某个数组的值比最大值大就算入答案。上第一次厕所前我的思路:开局\(30\)分钟。显然,我并不需要有一个数值最大才能赢,我只需要其中一个数值比其中一个数值比其中一个数值最大的那个要大的队要大即有可能获胜......
  • wzOI 2023.8.31 题解
    2023-09-0115:59:41$$前言$$太菜了,第一题都打成那样了没发现是MST,第三题数据范围没有很仔细看,以为是乱搞(组合之类的)题就直接跳了。不得不说这次比赛题目的一些思路还是挺妙的,一些想法确实我这种成分想不太到。$$A$$$$题意$$给出了\(m\)个可以查询的区间\([L_i,R_i]\)......
  • 【2023-09-07】“35”边界
    20:00一个人的力量是很难应付生活中无边的苦难的。所以,自己需要别人帮助,自己也要帮助别人。                                                 ——茨威格今天中午,老板......
  • 2023Java最新面试题整理 - Java 基础
    大家好,我是**闲者**,最近正在考虑找新工作,进行面试,但是工作时间比较久了,很多基础知识都很模糊,所以得复习下,顺便做下记录,也便于大家参考。以下为大纲,后期会定期更新[2023最新Java面试题(一)-Java基础](https://justmyfreedom.com/article/13/)[2023最新Java面试题(二)-容器]......
  • 牛客——SQL263 牛客每个人最近的登录日期(四)
    描述牛客每天有很多人登录,请你统计一下牛客每个日期登录新用户个数,有一个登录(login)记录表,简况如下:iduser_idclient_iddate1212020-10-122322020-10-123122020-10-124222020-10-135122020-10-136312020-10-147412020-10-1......