The 2021 Sichuan Provincial Collegiate Programming Contest

news2024/11/26 4:25:22

The 2021 Sichuan Provincial Collegiate Programming Contest

The 2021 Sichuan Provincial Collegiate Programming Contest

在这里插入图片描述

A. Chuanpai

题意:给出总值k,将k分成x+y=k,x和y均小于7,最多分成多少组。

思路:暴力跑一遍,注意判重和xy的范围即可。

AC code:

void solve() {
    int k; cin >> k;
    int cnt = 0;
    for (int i = 1; i <= k / 2; i ++) {
        if (i < 7 && k - i < 7) {
            cnt ++;
        }
    } cout << cnt << endl;
}

B. Hotpot

题意:

有0到n-1名游客围成一圈吃火锅,火锅配料有k种,第i名游客喜欢第 a i a_i ai种配料,最初每个游客幸福值为0,锅为空;

游客顺序下m步旗,由0->n-1…0->n-1的顺序循环进行操作,当轮到某个游客时:

  • 锅中有食材 a i a_i ai,全吃掉获得1幸福值
  • 否则幸福值不变,然后下入喜欢的食材

计算m步之后每位游客的幸福值

思路:

首先喜欢同一种食材的所有游客的幸福值操作是独立的,需要单独进行操作:

  • 当喜欢同一种食材的人为奇数时,每2*n次操作为一轮,一轮后该食材的每个人幸福值+1;
  • 为偶数时,n次操作为一轮,每轮中只有喜欢该食材的偶数位的幸福值+1;
  • 统计m轮次中可以进行完整的几轮操作,然后对于余数进行单独操作幸福值;

AC code:

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define db double
#define pb push_back
#define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;

typedef long long LL;
typedef pair<char, int> PCI;
typedef pair<int, int> PII;
const int N = 2e5+10, M = 2001;
const int INF = 0x3f3f3f3f3f, MOD = 998244353;
int T;
int cnt[N], a[N];
vector<int> g[N];

void solve() {
    int n, k, m; cin >> n >> k >> m;
    for (int i = 1; i <= k; i ++) g[i].clear();
    for (int i = 0; i < n; i ++) {
        cin >> a[i];
        cnt[i] = 0;
        g[a[i]].push_back(i);
    }
    for (int i = 1; i <= k; i ++) {
        int now = g[i].size();
        if (now == 0) continue;
        if (now & 1) {
            int u = m / (2 * n), v = m % (2 * n);
            for (auto x : g[i]) cnt[x] += u;
            int pos = 0;
            if (v >= n) {
                for (auto x : g[i]) {
                    if (pos) cnt[x] += 1;
                    pos ^= 1;
                }
            }
            v %= n;
            for (auto x : g[i]) {
                if (x >= v) break;
                if (pos) cnt[x] += 1;
                pos ^= 1;
            }
        } else {
            int u = m / n, v = m % n;
            int pos = 0;
            for (auto x : g[i]) {
                if (pos) cnt[x] += u;
                pos ^= 1;
            }
            pos = 0;
            for (auto x : g[i]) {
                if (x >= v) break;
                if (pos) cnt[x] += 1;
                pos ^= 1;
            }
        }
    }
    cout << cnt[0];
    for (int i = 1; i < n; i ++) cout << ' ' << cnt[i];
    cout << endl;
}

signed main() {
    fast();
    
    T = 1;
    cin >> T;
    while (T --) {
        solve();
    }
    return 0;
}

D. Rock Paper Scissors

题意:明牌石头剪刀布,B先出牌,D后出牌,B胜总分-1, D胜总分+1,双方均以最优操作,最后得分为多少。

思路:由于B先手,D总能找出最优操作,能胜则胜,否则打平,最后无牌下才会让B胜,模拟这个过程即可。

AC code:

void solve() {
    int br, bp, bs, dr, dp, ds; cin >> br >> bp >> bs >> dr >> dp >> ds;
    int cnt = 0;
    if (br) {
        if (dp >= br) dp -= br, cnt += br, br = 0;
        else br -= dp, cnt += dp, dp = 0;
 
        if (dr >= br) dr -= br, br = 0;
        else br -= dr, dr = 0;
 
        if (ds >= br) ds -= br, cnt -= br, br = 0;
        else br -= ds, cnt -= ds, ds = 0;
    }
    if (bp) {
        if (ds >= bp) ds -= bp, cnt += bp, bp = 0;
        else bp -= ds, cnt += ds, ds = 0;
 
        if (dp >= bp) dp -= bp, bp = 0;
        else bp -= dp, dp = 0;
 
        if (dr >= bp) dr -= bp, cnt -= bp, bp = 0;
        else bp -= dr, cnt -= dr, dr = 0; 
    }
    if (bs) {
        if (dr >= bs) dr -= bs, cnt += bs, bs = 0;
        else bs -= dr, cnt += dr, dr = 0;
 
        if (ds >= bs) ds -= bs, bs = 0;
        else bs -= ds, ds = 0;
 
        if (dp >= bs) dp -= bs, cnt -= bs, bs = 0;
        else bs -= dp, cnt -= dp, dp = 0;
    }
    cout << cnt << endl;
}

H. Nihongo wa Muzukashii Desu

题意:略。

思路:按照样例模拟更换字符串即可,注意读题,“ikimasu"要变成"itte”;

AC code:

void solve() {
    int n; cin >> n;
    map<string, string> mp;
    mp["chimasu"] = "tte";
    mp["rimasu"] = "tte";
    mp["mimasu"] = "nde";
    mp["bimasu"] = "nde";
    mp["nimasu"] = "nde";
    mp["kimasu"] = "ite";
    mp["gimasu"] = "ide";
    mp["shimasu"] = "shite";
    while (n --) {
        string s; cin >> s;
        if (s == "ikimasu") {
            cout <<"itte" << endl;
            continue;
        }
        for (auto [x, y] : mp) {
            if (s.find(x) != s.npos) {
                int t = s.find(x);
                s.replace(t, x.size(), y);
                cout << s << endl;
                break;
            }
        }
    }
}

K. K-skip Permutation

题意:略。

思路:循环标记判断即可,注意输出格式。

AC code:

void solve() {
    int n, k; cin >> n >> k;
    vector<int> st(n + 1, 0), ans;
    for (int i = 1; i <= n; i ++) {
        if (!st[i]) {
            for (int j = i; j <= n; j += k) {
                if (!st[j]) ans.pb(j), st[j] = 1;
                else break;
            }
        }
    }
    cout << ans[0];
    for (int i = 1; i < ans.size(); i ++) cout << ' ' << ans[i];
    cout << endl;
}

L. Spicy Restaurant

题意:

在无向图n个火锅店的无向图中,第i个餐厅的辣度为 w i w_i wi,现在给出无向图的m条边,有q名游客想去吃火锅,现在给出每个人当前的位置和他们能承受的最大辣度,计算每个游客和能接受的辣度餐厅之间的最短距离。

思路:

辣度的范围很小,对同一种辣度的所有点进行BFS寻找靠近该辣度最近的其他店,用一个二维数组来记录某个辣度到某个点的最短距离。

AC code:

#include<bits/stdc++.h>
#define endl '\n'
#define db double
#define pb push_back
#define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;

typedef long long LL;
typedef pair<char, int> PCI;
typedef pair<int, int> PII;
const int N = 1e5+10, M = 2001;
const int INF = 0x3f3f3f3f3f, MOD = 998244353;
int T;
int n, m, q;
int w[N];
vector<vector<int>> dis(101, vector<int> (N, INF));
vector<int> g[N];
map<int, vector<int>> mp;

void solve() {
    cin >> n >> m >> q;
    for (int i = 1; i <= n; i ++) {
        cin >> w[i];
        mp[w[i]].push_back(i);
        dis[w[i]][i] = 0;
    }
    while (m --) {
        int u, v; cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    for (int i = 1; i <= 100; i ++) {
        queue<int> q;
        for (auto x : mp[i]) q.push(x);
        vector<int> st(n + 1, 0);
        while (!q.empty()) {
            auto t = q.front();
            st[t] = 1;
            q.pop();
            for (auto nex : g[t]) {
                dis[i][nex] = min(dis[i][t] + 1, dis[i][nex]);
                if (!st[nex]) q.push(nex);
            }
        }
    }
    while (q --) {
        int p, a; cin >> p >> a;
        int ans = INF;
        for (int i = 1; i <= a; i ++) {
            ans = min(ans, dis[i][p]);
        }
        cout << (ans != INF ? ans : -1) << endl;
    }
}

int main() {
    fast();
    
    T = 1;
    //cin >> T;
    while (T --) {
        solve();
    }
    return 0;
}

M. True Story

题意:略;

思路:距离和每个人的速度是一定的,找到间隔时间最大的时间段看是否能到达即可;

AC code:

void solve() {
    int n, k, x, po; cin >> n >> k >> x >> po;
    for (int i = 1; i <= n; i ++) cin >> s[i];
    for (int i = 1; i <= k; i ++) cin >> t[i];
    for (int i = 1; i <= k; i ++) cin >> p[i];
 
    vector<int> late;
    late.push_back(po);
    for (int i = 1; i <= k; i ++) late.push_back(p[i] - t[i]);
    sort(late.begin(), late.end(), greater<int>());
    int ans = 0, mx = late[0];
    for (int i = 1; i <= n; i ++) {
        if (mx * s[i] >= x) ans ++;
    }
    cout << ans << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1652303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB画图,重磅教程MATLAB的美图及强大的绘图功能|

目录 1.plot() 函数&#xff1a; 2.scatter() 函数&#xff1a; 3.histogram() 函数&#xff1a; 4.bar() 函数&#xff1a; 5.plot3() 函数&#xff1a; 6.imshow() 函数&#xff1a; 7.surf() 函数&#xff1a; 福利&#xff1a;免费送资料 MATLAB&#xff08;Matrix…

Tcl学习笔记(四)——流程控制、过程、命名空间、访问文件

1. 流程控制 if命令 if命令后跟两个参数&#xff1a;表达式、待执行的Tcl脚本。if命令中的每一个左大括号都必须与它前一个字符同行。 有elseif和else可选子句&#xff0c;使用时与if中第二个参数的右大括号放在同一行。 switch命令 switch命令利用一个给定值与多个模式进行匹…

crossover不能生成容器 无法创建容器怎么办

CrossOver不能生成容器&#xff0c;我们应该先了解什么是容器&#xff0c;容器是盛放类虚拟机——CrossOver在macOS系统和Linux系统下载的win版软件的器皿。无法创建容器怎么办&#xff1f;无法创建多数情况是macOS系统与CrossOver不兼容所造成的。 首先&#xff0c;我们将介绍…

护眼台灯什么牌子好一点?五款专业护眼灯品牌排行分享

台灯作为家庭中不可或缺的桌面照明设备&#xff0c;在儿童和青少年的学习生活中扮演着至关重要的角色。对于这个年龄段的孩子来说&#xff0c;台灯的选择尤为关键&#xff0c;因为不恰当的照明可能对他们娇嫩的视力造成损害。护眼台灯什么牌子好一点&#xff1f;家长们在挑选台…

男士内裤什么品牌质量好?男士内裤选购指南攻略分享

有很多小伙伴认为男士内裤只是穿在里面的&#xff0c;只要能穿就不讲究了。但实际上选择一些质量不好的男士内裤会让穿着舒适性十分不佳&#xff0c;同时还会因为不具备抗菌效果而滋生细菌&#xff0c;导致出现健康问题。 最近我也是深入研究了一番关于男士内裤&#xff0c;今天…

连锁餐饮店做扫码点餐小程序的作用是什么

餐饮业市场规模高&#xff0c;餐厅、奶茶店、火锅店、小吃店、烧烤店等每天都有不少用户消费&#xff0c;其中也不乏连锁品牌&#xff0c;在线下就餐场景里&#xff0c;扫码点餐已经成为众多商家必备&#xff0c;提升客户餐品选择效率&#xff0c;也能提高商家管理能力及节约时…

Linux学习之高级IO

之前的内容我们基本掌握了基础IO&#xff0c;如套接字&#xff0c;文件描述符&#xff0c;重定向&#xff0c;缓冲区等知识都是文的基本认识&#xff0c;而高级IO则是指更加高效的IO。 对于应用层&#xff0c;在读写的时候&#xff0c;本质就是把数据写给OS&#xff0c;若一方…

MFC DLL注入失败一些错误总结

使用cheat Engine为MFC窗口程序注入DLL时一定要注意&#xff0c;被注入的exe程序和注入的DLL 的绝对路径中一定不要带有中文字符&#xff0c;否则会遇到各种各样的奇怪错误&#xff0c;如下所示&#xff1a; 以下是dll绝对路径中均含有中文字符&#xff0c;会报错误&#xff…

浙大最新开源:MGMap-掩码引导学习的在线矢量化高精地图构建方法

论文标题&#xff1a; MGMap: Mask-Guided Learning for Online Vectorized HD Map Construction 论文作者&#xff1a; Xiaolu Liu, Song Wang, Wentong Li, Ruizi Yang, Junbo Chen, Jianke Zhu 作者单位&#xff1a;浙江大学&#xff0c;有鹿科技 开源地址&#xff1a;…

RUST 编程语言使构建更安全的软件变得更加容易。RUST ALL THE THINGS 需要什么?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

极致设计!详解专业网页设计的全套步骤和流程

在当今的数字时代&#xff0c;拥有一个专业、易于使用和有吸引力的网页对任何企业或个人都至关重要。专业的网页设计是实现这一目标的关键步骤之一。本文将详细介绍专业的网页设计步骤和过程&#xff0c;以帮助您了解如何设计一个优秀的网页。 在介绍专业网页设计步骤和流程之…

温暖家居新风尚,能率壁挂炉——设计新风尚,体验再升级

随着家居品质要求的提升&#xff0c;现代人对家居的舒适性和设计感有了更高的追求。壁挂炉&#xff0c;作为现代家居中不可或缺的一部分&#xff0c;其重要性日益凸显。中国国际供热通风空调、卫浴及舒适家居系统展览会&#xff08;ISH China & CIHE&#xff09;将于2024年…

短视频矩阵系统电脑端/手机版双端加盟saas技术源头开发

短视频矩阵系统是为了帮助用户更高效地管理、编辑、发布和分析短视频内容而设计的综合性平台。这种系统通常包含电脑端和手机端两个部分&#xff0c;每个部分都有其特定的功能模型&#xff0c;以适应不同设备的操作习惯和使用场景。以下是根据搜索结果中提供的信息&#xff0c;…

差动绕组电流互感器过电压保护器ACTB

安科瑞薛瑶瑶18701709087/17343930412 电流互感器在运行中如果二次绕组开路或一次绕组流过异常电流&#xff0c;都会在二次侧产生数千伏甚至上万伏的过电压。这不仅会使CT和二次设备损坏&#xff0c;也严重威胁运行人员的生命安全&#xff0c;并造成重大经济损失。采用电流互感…

java项目+maven+sonarqube+githook 实现代码提交审查

java项目mavensonarqubegithook 实现代码提交审查 当在团队开发过程中, 由于开发人员技术和风格的不同,导致代码质量和风格各不相同, 为了减少合并时的工作量, 以及基础的一些bug 的避免, 可以使用 (sonarqube阿里巴巴开发规范) 实现代码质量的检测. 为了更加简便, 即在使用git…

大规模LiDAR数据处理

点云存在许多描述环境或建筑物等物体的 x、y、z 坐标。通过激光技术 (LiDAR) 获取的点云通常带有每个坐标的额外测量值和特征。例如&#xff0c;反射强度、回波次数、回波、扫描角度和 RGB 值。换句话说&#xff0c;点云本质上是大量的数据集。 在本文中&#xff0c;我们使用开…

acwing算法提高之数据结构--平衡树Treap

目录 1 介绍2 训练 1 介绍 本博客用来记录使用平衡树求解的题目。 插入、删除、查询操作的时间复杂度都是O(logN)。 动态维护一个有序序列。 2 训练 题目1&#xff1a;253普通平衡树 C代码如下&#xff0c; #include <cstdio> #include <cstring> #include …

小语言模型的潜力

想象一下这样一个世界&#xff1a;智能助手不在云端&#xff0c;而是在你的手机上&#xff0c;无缝了解你的需求并以闪电般的速度做出响应。这不是科幻小说&#xff0c;而是科幻小说。这是小语​​言模型 (SLM) 的希望&#xff0c;这是一个快速发展的领域&#xff0c;有可能改变…

Beego 使用教程 5:页面视图

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发&#xff0c;包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado&#xff0c; Sinatra 和 Flask beego 官网&#xff1a;http://beego.gocn.vip/ 上面的 bee…

【笔试训练】day21

1.爱丽丝的人偶 题目意思就是构造一个序列&#xff0c;序列的每个元素要么比左右两个高&#xff0c;要么比左右两个低。 可以看成是一条上下波动的曲线。 我们可以模拟波动的这个过程。 假设有一个数组&#xff0c;里面元素是1-n.遍历每一个位置。用一个指针pos来表示当前检…