2023河南ccpc省赛总结(附带部分题题解)

2023-10-31

前言:本人大一萌新,第一次打ccpc线下赛,和队友A3题,收获铜牌一枚,感受到了老师所说的氛围感。因为F题滑动窗口优化不会写(坤础忘了),痛失银牌,来年再战。

题目链接:Dashboard - 2023 CCPC Henan Provincial Collegiate Programming Contest - Codeforces (Unofficial mirror by Menci)

题目:Problem A. 小水獭游河南(签到)

小水獭来到河南旅游,它认为一个字符串 s 是 HENAN 的当且仅当存在两个非空字符串 a 和 b 满
足如下三个条件:
• a 由小写字母组成,且 a 中每种字母只出现了一次。
• b 由小写字母组成,且 b 是回文串,也就是说将 b 翻转后得到的字符串和 b 相同。
• 将 a 和 b 顺序拼接得到的字符串和 s 相同,也就是说 s = a + b。
例如 henan 是 HENAN 的,因为 henan=he+nan,此外也可分解为 hena+n。但 hhnan 和 ysmihoyocom
不是 HENAN 的。
现在给定一个字符串,请你帮助小水獭判断它是不是 HENAN 的。

这题只需要我们暴力枚举即可,最多只用枚举到下标为25的地方(下标从0开始),因为往后必定会出现a中有重复字符的情况(英文字母就26个啊),不满足题目条件。所以只需要枚举前min(len,26)位,用substr函数截取子串,reverse翻转子串判断是否为回文串即可。

注意:这题有个坑点是len的长度为1,这样就不满足题目要求a,b都为非空的情况,直接输出NaN即可。

#include <iostream>
#include <cmath>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include <set>
#include <unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int cnt[26];
void solve(){
    memset(cnt,0,sizeof cnt);
    string s;cin>>s;
    int len=s.size();
    if(len==1){
        cout<<"NaN\n";
            return;
    }
    for(int i=0;i<min(len,26);i++){
        if(cnt[s[i]-'a']){
            cout<<"NaN\n";
            return;
        }
        cnt[s[i]-'a']++;
        string s1,s2=s.substr(i+1);
        s1=s2;
        reverse(s2.begin(),s2.end());
        if(s1==s2){
            cout<<"HE\n";
            return ;
        }
    }
    cout<<"NaN\n";
    return;
}
int main() {
    int T=1;cin>>T;
    while(T--)solve();
    return 0;
}

 题目:Problem H. Travel Begins(贪心)

 这题应该是个贪心,让我们将n分成至多份,然后求每份和的最大值和最小值。

根据题上的要求,求最小时,我们把n每次分出来0.4999999...求最大时,把n每次分出来0.5。

求最小时分两种情况:1.n能分出来k个0.49999.... 2.n分不出来k个0.49999...

同理,求最大也是这个思路,观察能不能k个分出来0.5

注意:我这个方法计算时会出现浮点数,所以前面强制转了int类型。

#include <iostream>
#include <cmath>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include <set>
#include <unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;

void solve(){
    int n,k;cin>>n>>k;
//算最小值部分
    if(n-(k-1)*0.5<=0){
        cout<<0;
    }
    else {
        if((k-1)&1){
            cout<<(int)(n-(k-1)*0.5+1);
        }
        else cout<<(int)(n-(k-1)*0.5);
    }
    cout<<" ";
//算最大值部分
    if(n-k*0.5>0){
        if((k-1)&1){
            cout<<(int)(k-1+n-(k-1)*0.5)+1;
        }
        else cout<<(int)(k-1+n-(k-1)*0.5);
    }
    else {
        cout<<n*2;
    }
    cout<<"\n";
    
}
int main() {
    int T=1;cin>>T;
    while(T--)solve();
    return 0;
}

题目:Problem F. Art for Last(滑动窗口)


这题的思路是,从头开始枚举每一个长度为k的区间。在这个区间内找到一个最小的差值,然后计算(最小的差值*区间两端点的差值),最后取个min即可。证明就不写了,因为是随便选k个数,排序后直接取就行。

这题用的是滑动窗口优化写的,不然的话时间每次查找最小值时会有很多重复操作,时间复杂度是O(n^{2}) ,1e6的范围直接爆掉。

赛后补题用优先队列实现滑动窗口,再算上排序。时间复杂度是O(n\log n),过掉。

#include <iostream>
#include <cmath>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include <set>
#include <unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=5e5+10;
int a[N],q[N],b[N],c[N];
int n,k;
int main() {
    cin>>n>>k;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);//输入原数组
    sort(a+1,a+1+n);//排序
    for(int i=1;i<n;i++){
        b[i]=a[i+1]-a[i];//计算两数差值
    }
    /* for(int i=1;i<n;i++)cout<<b[i]<<" ";
    cout<<endl; */
    priority_queue<pii,vector<pii>,greater<pii> > q;
//优先队列实现滑动窗口
    for(int i=1;i<k;i++)q.push({b[i],i});
//存储差值和下标,以插值排序。我这里先存储了k个。
    for(int i=1;i+k-1<=n;i++){
//枚举区间算最大
        c[i]=q.top().first;
        while(q.top().second<=i&&q.size())q.pop();
//下标不满足时直接删除。等同于滑动窗口的去除队头操作
        q.push({b[i+k-1],i+k-1});
//直接将差值和下标加入即可,优先队列会自动排序。
    }
    /* for(int i=1;i<n;i++)cout<<c[i]<<" ";
    cout<<endl; */
    ll res= 1e18;//小心不开long long
    for(int i=1;i+k-1<=n;i++){
        res=min(1LL*(a[i+k-1]-a[i])*c[i],res);//计算最小值
    }
    cout<<res;
    return 0;
}

题目:Problem C. Toxel 与随机数生成器(确实挺随机的)

题解里说解法很多,确实!

我们截取前1000个字符,然后从1001开始找,如果有相同那就是NO;否则就YES

#include <iostream>
#include <cmath>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include <set>
#include <unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;

int main() {
    string s,s1;cin>>s;
    s1=s.substr(0,1000);
    s.erase(0,1000);
    if(s.find(s1)!=-1)cout<<"NO\n";
    else 
    cout<<"YES\n";
    return 0;
}

结尾:

大一萌新第一次参加线下比赛,能拿奖牌十分甚至九分激动。

F题的滑动窗口优化卡了很久也没能调出来,痛失银牌,很可惜(基础差了)。卡太久就应该换题了,第一次参加没有经验。团队合作是很重要的一点,找队友思维的漏洞,三个人如果自己写自己的,那只能打铁。

前几题都是思维题,并没有涉及太多算法,所以要注重对思维的训练。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023河南ccpc省赛总结(附带部分题题解) 的相关文章

  • 使用来自本地对象的消息的 std::Exception

    以下代码是否可以安全地抛出带有自定义消息的异常 include
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • 错误 C2064:术语不计算为采用 1 个参数的函数

    class Student bool Graduate return m bGraduate class School vector
  • 如何获取任意类型的默认值

    在 C 中我可以写这样的东西 class AnyThing
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 有哪些 API 可在 Windows 中使用 C# 配置扬声器设置?

    我环顾了很多不同的地方 但似乎找不到一个简单的方法来做到这一点 我在 Windows 7 中有多个声卡 并使用 HDMI 将声音输出到我的 AVR 放大器 我遇到的问题是 当放大器关闭时 它会导致窗口丢失扬声器配置 所以我想做的是编写一个小
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • 使用成员函数作为 std::shared_ptr 的自定义删除器时出现问题

    我正在尝试弄清楚如何将 std shared ptr 与自定义删除器一起使用 具体来说 我将其与 SDL Surface 一起使用 如下所示 std shared ptr
  • 编译器在函数名称前添加下划线前缀的原因是什么?

    当我看到 C 应用程序的汇编代码时 如下所示 emacs hello c clang S O hello c o hello s cat hello s 函数名称以下划线作为前缀 例如callq printf 为什么这样做以及它有什么优点
  • 如何忽略搜索条件中的空属性

    我有一个不好的要求要做 无论如何 我必须在我的应用程序中实现它 我有一个Track class public class Track public string Name get set public string City get set
  • C# Linq 可以做组合数学吗?

    我有这个数据结构 class Product public string Name get set public int Count get set var list new List
  • C++ std:.auto_ptr 或 std::unique_ptr (支持多个编译器,甚至是旧的 C++03 编译器)?

    我正在尝试更新一些 C 代码 我想转向更现代的代码 c 11 但我仍然需要使用一些较旧的编译器 兼容 c 03 来编译代码 因为支持的平台限制 我知道在 C 11 编译器中 std auto ptr 已被弃用 但由于较旧的编译器支持 我不能
  • 如何从句柄确定进程是 32 位还是 64 位?

    如何从使用 OpenProcess 获取的进程句柄中获取信息 无论进程是 32 位还是 64 位 是的 IsWow64Process 毫无用处 令人烦恼 它的真正意思是 启用了 32 位模拟 如果您在 32 位操作系统上运行 则返回 fal
  • 将函数作为函数参数传递

    Unity C 似乎无法识别Func lt gt 作为函数委托的符号 那么 如何将函数作为函数参数传递呢 我有一个想法Invoke functionName 0 可能有帮助 但我不确定它是否实际上立即调用该函数 或者等待帧结束 还有别的办法
  • 序列化时如何跳过 xml 声明?

    我正在尝试输出一个没有 xml 头的 xml 文件 例如 我试过 Type t obj GetType XmlSerializer xs new XmlSerializer t XmlWriter xw XmlWriter Create c
  • Azure Function App Azure 服务总线触发器触发两次

    我使用带有服务总线触发器的 Azure Function Apps 来读取服务总线并对服务总线消息的内容执行操作 服务总线接收 JSON 序列化对象 然后将 JSON 消息反序列化回 Function App 中的对象 然而 由于某种原因
  • 在 C++ 中将大型数据向量写入/读取到二进制文件

    我有一个 C 程序 它通过将 ascii 文件中的网格人口数据读取到大型 8640x3432 元素双精度向量中来计算给定半径内的人口 将 ascii 数据读入向量大约需要 30 秒 循环每列和每行 而程序的其余部分只需要几秒钟 我被要求通过
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本

随机推荐

  • MySQL基本知识

    什么是事务 事务是一个独立的工作单元 里面的操作要不全部成功 要不全部失败 事务有什么特性 原子性 操作要不全部成功 要不全部失败 隔离性 多个并发事务之间相互隔离 互不干扰 或者说一个事务的操作对于另外一个事务是不可见的 持久性 事务一旦
  • 密集预测/Dense Prediction

    Pixelwise dense prediction is the task of predicting a label for each pixel in the image 来自于卷积神经网络在图像语义分割 semantic image
  • haproxy应用

    不用手动编译安装 haproxy 1 7 3 tar gz yum install y rpm build rpmbuild help rpmbuild tb haproxy 1 7 3 tar gz cd root rpmbuild RP
  • NLP专栏|图解 BERT 预训练模型!

    关注后 星标 Datawhale 每日干货 每月组队学习 不错过 Datawhale干货 作者 张贤 哈尔滨工程大学 Datawhale原创作者 本文约7000字 NLP专栏文章 建议收藏阅读 审稿人 Jepson Datawhale成员
  • linux内核模块编程(二)----timer定时器

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 一 why 一般地 在我们嵌入式软件开发中 使用定时器的目的是为了实现
  • C#中实现FIR带通滤波

    最近有一个需求 在C 中实现FIR滤波 网上查了些资料感觉FIR滤波使用的还算比较多 相关的原理也比较简单 参考下面在Python环境中实现FIR的博客 在C 的环境中实现了一遍 https blog csdn net moge19 art
  • LeetCode 44 二叉搜索树的最近公共祖先

    题目 给定一个二叉搜索树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个结点 p q 最近公共祖先表示为一个结点 x 满足 x 是 p q 的祖先且 x 的深度尽可能大 一个节点也可以是它自己的
  • c++之A a和A *a=new A()

    new是在堆上分配内存 它需要用delete释放 否则会造成内存泄漏 A a 在程序执行完毕后 会自动释放内存 int main A a 定义了一个对象 A p new A 在堆上定义了一个对象 它的指针保存在p里 堆上定义的对象没有名字
  • 毕业论文数据清洗会遇到的问题及解决方法完整版

    数据清洗 实时更新中 未完待续 模型导入 import pandas as pd import os 用于改变路径很方便 os chdir r C Users Desktop 毕业论文 按照某一行或列合并2个DataFrame表 data
  • Linux学习笔记——文件权限的修改

    Linux chmod 英文全拼 change mode 命令是控制用户对文件的权限的命令 Linux Unix 的文件调用权限分为三级 文件所有者 Owner 用户组 Group 其它用户 Other Users 在学习文件权限修改之前先
  • 关于前端框架vue2升级为vue3的相关说明

    一些框架需要升级 当前 202306 Vue 的最新稳定版本是 v3 3 4 Vue 框架升级为最新的3 0版本 涉及的相关依赖变更有 前提条件 已安装 16 0 或更高版本的Node js 摘 必须的变更 核心库vue 2 gt 3 路由
  • 霸王ii显示服务器,[消息]一测服务器关闭

    新浪游戏 2006 06 01 15 48 为了迎接即将于6月2日到来的二次内测 进行服务器的维护与更新工作 霸王大陆 首次内测服务器 已在6月1日上午10点暂时关闭 首次内测正式结束 服务器关闭后 首次内测的角色等级经验 装备 社会关系等
  • 如何快速打好Java基础?

    二哥 我是一名大学生 专业是电力工程 但想自学 Java 如何快速打好基础呢 微信上 tison 向我提出了这个问题 我想我是有资格来回答的 从北京奥运会那年开始学 Java 到现在已经有 10 多个年头了 真的是从一名编程白痴一步步走到现
  • 爬虫入门——如何顺利安装scrapy(windows)

    首先我们要明白 scrapy是基于python实现的 现在我们要先安装python python的安装 打开官网 https www python org 点击downloads 这边我下载的是3 9 0版本 需要安装包可私信我 2 双击安
  • JavaScript 删除对象中的某一项

    delete let obj a 1 b 2 c 3 d 4 e 5 f 6 delete obj b console log obj 运行结果 Reflect deleteProperty JavaScript 中的静态方法 Reflec
  • 命令行光标移动技巧

    Ctrl 左右 单词之间跳转 ctrl a 光标移到行首 ctrl e 光标移到行尾 ctrl c 杀死当前进程 ctrl k 清除光标后至行尾的内容 ctrl u 清除光标前至行首间的所有内容 ctrl l 清屏 相当于clear ctr
  • VTM配置

    VTM配置 encoderApp decoder等添加cfg文件 更改Encoder Decoder等中属性 调试 命令参数 工作目录 修改第一步添加cfg文件中的I O配置 最后注意release和debug要保持一致 encoderAp
  • postman文件接口

    文件的上传和下载测试 先取得网址 文件的上传分为两种格式 一种是表单格式的 另一种是Ajax格式的 上传文件为post请求 下载文件是get请求 首先测试的是表单格式的 把key值设置为file 点击选择并上传文件 点击发送 显示返回发送成
  • 前端实现3D魔方旋转特效

    代码自用自取 复制粘贴直接使用 喜欢的话可以查看博主其它文章 贡献一丢丢的浏览量 感激不尽 先看一下效果
  • 2023河南ccpc省赛总结(附带部分题题解)

    前言 本人大一萌新 第一次打ccpc线下赛 和队友A3题 收获铜牌一枚 感受到了老师所说的氛围感 因为F题滑动窗口优化不会写 坤础忘了 痛失银牌 来年再战 题目链接 Dashboard 2023 CCPC Henan Provincial