第五场周赛(字符串卡常个人Rank赛)——题解

简介: 本次题目因为比较简单,除了个别题目,其余题目我只写一个思路不再贴代码。 先是Div.2的题解 A题奇怪的优化,把递归函数改成2*fun(...)即可,其实看懂程序也不难,就是求a*2b; B题你会string吗,直接String变量比较大小即可 C题数数,没有卡正常方法,可以直接把数转成二进...

本次题目因为比较简单,除了个别题目,其余题目我只写一个思路不再贴代码。

先是Div.2的题解

A题奇怪的优化,把递归函数改成2*fun(...)即可,其实看懂程序也不难,就是求a*2b

B题你会string吗,直接String变量比较大小即可

C题数数,没有卡正常方法,可以直接把数转成二进制找1个数,此时复杂度为O(logN),更快的方法是使用__builtin_popcount函数,复杂度为O(m(m为数二进制中1的个数));

D,E题,看Div.1中本题解释

所有代码都可以10行内写出,所以我不再给出代码;

 

Div.1题解

A题简单代码优化,区间求和,直接再弄一个sum数组即可

B题简单字符串处理,因为只能在字符串尾部加字符,所以我的做法是把每个字符给个序号(既位置)存入容器,再分别做三个操作。

对于1操作,删除存储那个字符的集合即可。

对于2操作,对应集合加上序号即可。

对于3操作,在1操作时候维护一个树状数组即可。

整体时间复杂度为O(QlogN),N为字符个数。但这种写法常数略大,有更优化的思路可以和我探讨一下。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 set<int> dis[26];
 5 vector<pair<int,int>> vis(26,make_pair(0,0));
 6 int q,x,k,tot = 0;
 7 char ch;
 8 int c[100005] = {0};
 9 
10 inline int lowbit(int x){
11     return x&(-x);
12 }
13 
14 int update(int i){
15     while(i <= 100000){
16         c[i] += 1;
17         i += lowbit(i);
18     }
19 }
20 
21 int sum(int i){
22     int res = 0;
23     while(i > 0){
24         res += c[i];
25         i -= lowbit(i);
26     }
27     return res;
28 }
29 
30 int main(){
31     ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
32     freopen("test6.in","r",stdin);
33     freopen("test6.out","w",stdout);
34     int f1 = 0;
35     cin>>q;
36     generate(vis.begin(),vis.end(),[&f1](void)->pair<int,int>{return make_pair(f1++,0);});
37     while(q--){
38         cin>>x;
39         if(x == 1){
40             cin>>k;
41             if(k > 26)
42                 continue;
43             sort(vis.begin(),vis.end(),
44                 [](pair<int,int> a,pair<int,int> b)->bool{
45                     if(a.second == b.second)
46                         return a.first < b.first;
47                     return a.second > b.second;
48                 });
49             vis[k-1].second = 0;
50             for(auto it:dis[vis[k-1].first]){
51                 update(it);
52             }
53             dis[vis[k-1].first].clear();
54         }
55         else if(x == 2){
56             cin>>ch;
57             dis[ch-'a'].insert(++tot);
58             for(auto& a:vis){
59                 if(a.first == ch-'a'){
60                     a.second++;
61                     break;
62                 }
63             }
64         }
65         else if(x == 3){
66             cin>>ch;
67             if(dis[ch-'a'].empty())
68                 cout << -1 << endl;
69             else
70                 cout << *(dis[ch-'a'].begin())-sum(*(dis[ch-'a'].begin())) << endl;
71         }
72     }
73     cerr << clock() << endl;
74     return 0;
75 }
View Code

C题简单信息检索,标记初次出现位置即可

D题高级信息检索,把每个前缀都存入map,此时可以使用unordered_map更快,或者建立Trie树即可。好像还有人写exKMP,也没问题,毕竟100+100数据量。

E题密码破解,马拉车算法裸题。

 

目录
相关文章
实名认证接口文档
为了进一步规范互联网应用服务中的实名认证,保护用户信息安全,规范互联网应用服务的实名认证流程,保证实名制信息的真实、准确和完整,提升用户体验,中国互联网协会、工业和信息化部信息通信管理局等五部门联合发布了《互联网应用程序个人信息保护管理规定》(以下简称“《规定》”),并将于2017年3月1日起实施。《规定》的出台为我国互联网行业在个人信息保护方面提供了明确的法律依据,是我国互联网行业发展历程中具有里程碑意义的一件大事。
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
586 212
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
233 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
822 60
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1165 157
|
6天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
492 109