首页 > 其他分享 >2024初秋集训——提高组 #35

2024初秋集训——提高组 #35

时间:2024-10-10 20:14:12浏览次数:7  
标签:短句 ok int 35 2024 名词 NP 初秋 op

A. 语言

题目描述

在一个语言中,有 \(26\) 种单词,每个单词用一个小写英文字母表示。每种单词可能有多种词性,词性有名词(\(N\))、动词(\(V\))、形容词(\(A\))。我们定义一个名词短句(\(NP\))为一个名词(\(N\))或一个形容词加名词短句(\(A+NP\))或两个名词短句(\(NP_1+NP_2\)),一个句子(\(S\))为一个名词短句加动词加名词短句(\(NP_1+V+NP_2\))。

现在给定一些单词,请你判断它有没有可能是一个句子。

思路

很明显一段子串是名词短句当且仅当其中只包含 \(N,P\) 且最后一个单词为 \(N\)。所以我们枚举动词在哪里,并预处理前后缀是否为名词短句即可。

时空复杂度均为 \(O(N)\)。

代码

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

const int MAXN = 100001;

int t, n, a[26];
bool ok[MAXN];
string s;

void Solve() {
  for(int i = 0; i < 26; ++i) {
    cin >> a[i];
  }
  cin >> s;
  n = s.size(), s = ' ' + s;
  ok[n] = (a[s[n] - 'a'] == 2 || a[s[n] - 'a'] == 3 || a[s[n] - 'a'] == 6 || a[s[n] - 'a'] == 7);
  for(int i = n - 1; i >= 1; --i) {
    ok[i] = (ok[i + 1] & (a[s[i] - 'a'] == 1 || a[s[i] - 'a'] == 2 || a[s[i] - 'a'] == 3 || a[s[i] - 'a'] == 5 || a[s[i] - 'a'] == 6 || a[s[i] - 'a'] == 7));
  }
  bool op = (a[s[1] - 'a'] == 1 || a[s[1] - 'a'] == 2 || a[s[1] - 'a'] == 3 || a[s[1] - 'a'] == 5 || a[s[1] - 'a'] == 6 || a[s[1] - 'a'] == 7);
  for(int i = 2; i < n; ++i) {
    if((a[s[i] - 'a'] == 4 || a[s[i] - 'a'] == 5 || a[s[i] - 'a'] == 6 || a[s[i] - 'a'] == 7) && op && (a[s[i - 1] - 'a'] == 2 || a[s[i - 1] - 'a'] == 3 || a[s[i - 1] - 'a'] == 6 || a[s[i - 1] - 'a'] == 7) && ok[i + 1]) {
      cout << "Yes\n";
      return;
    }
    op &= (ok[i + 1] & (a[s[i] - 'a'] == 1 || a[s[i] - 'a'] == 2 || a[s[i] - 'a'] == 3 || a[s[i] - 'a'] == 5 || a[s[i] - 'a'] == 6 || a[s[i] - 'a'] == 7));
  }
  cout << "No\n";
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  for(cin >> t; t--; Solve()) {
  }
  return 0;
}

B. 色球

题目描述

有 \(N\) 个栈,和 \(N\) 种颜色的球。给定 \(M\) 次操作。

  • 往第 \(z\) 个栈压入 \(x\) 个颜色为 \(y\) 的球。
  • 弹出第 \(z\) 个栈的顶部 \(x\) 个球,并求出最后一个球的颜色。
  • 将第 \(u\) 个栈的球依次弹出并压入 \(v\) 中。

思路

这里主要是第三个操作最难处理。第三个操作很明显可以用启发式合并解决,但是它在弹出和压入时会进行反转,所以我们可以对每个栈记录其有没有反转过,如果反转了则压入和删除都要从栈底进行,所以改用双端队列即可。

空间复杂度 \(O(N+M)\),时间复杂度 \(O((N+M)\log N)\)。

代码

#include<bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;

const int MAXN = 200001;

int n, m;
bool vis[MAXN];
deque<pii> que[MAXN];

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for(int i = 1, x, y, z; i <= m; ++i) {
    string op;
    cin >> op >> x >> y;
    if(op == "push") {
      cin >> z;
      if(!vis[z]) {
        que[z].push_front({y, x});
      }else {
        que[z].push_back({y, x});
      }
    }else if(op == "pop") {
      int ans = 0;
      for(; x; ) {
        if(!vis[y]) {
          auto &[a, b] = que[y].front();
          ans = a;
          if(b <= x) {
            x -= b;
            que[y].pop_front();
          }else {
            b -= x;
            break;
          }
        }else {
          auto &[a, b] = que[y].back();
          ans = a;
          if(b <= x) {
            x -= b;
            que[y].pop_back();
          }else {
            b -= x;
            break;
          }
        }
      }
      cout << ans << "\n";
    }else if(op == "put") {
      if(que[x].size() < que[y].size()) {
        for(; !que[x].empty(); ) {
          if(!vis[x]) {
            auto [a, b] = que[x].front();
            if(!vis[y]) {
              que[y].push_front({a, b});
            }else {
              que[y].push_back({a, b});
            }
            que[x].pop_front();
          }else {
            auto [a, b] = que[x].back();
            if(!vis[y]) {
              que[y].push_front({a, b});
            }else {
              que[y].push_back({a, b});
            }
            que[x].pop_back();
          }
        }
      }else {
        swap(que[x], que[y]);
        swap(vis[x], vis[y]);
        for(; !que[x].empty(); ) {
          if(!vis[x]) {
            auto [a, b] = que[x].front();
            if(!vis[y]) {
              que[y].push_front({a, b});
            }else {
              que[y].push_back({a, b});
            }
            que[x].pop_front();
          }else {
            auto [a, b] = que[x].back();
            if(!vis[y]) {
              que[y].push_front({a, b});
            }else {
              que[y].push_back({a, b});
            }
            que[x].pop_back();
          }
        }
        vis[y] ^= 1;
      }
    }
  }
  return 0;
}

标签:短句,ok,int,35,2024,名词,NP,初秋,op
From: https://www.cnblogs.com/yaosicheng124/p/18457035

相关文章

  • 【专题】2024年中国电商市场研究报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=37835在全球电商持续发展的背景下,中国电商市场面临新态势。增长压力与机遇并存,从综合电商与直播电商发展的放缓,到企业3C数码商用品电商采购的趋势,以及零售业拥抱“性价比时代”,中国电商正积极探索新路径。同时,社群电商爆品营销也为出海品牌带来......
  • 尚硅谷rabbitmq 2024 第50节 集群负载均衡 核心功能 答疑
    消费者用@RabbitListener或者@KafkaLisenter,那生产者呢(springboot)在SpringBoot中,生产者可以使用`RabbitTemplate`来发送消息到RabbitMQ。以下是一个简单的示例:```javaimportorg.springframework.amqp.rabbit.core.RabbitTemplate;importorg.springframework.beans.fac......
  • 哔咔漫画下载最新版本2024技巧
    电脑制作漫画的流程通常包括以下几个步骤:构思与策划明确漫画的主题、风格以及目标受众。哔咔漫画制定故事大纲,包括主要情节、人物设定等。剧本编写哔咔漫画编写详细的脚本,包括对话、哔咔漫画动作描述、场景说明等。脚本应该清晰地指示每个镜头的内容,以便后续的绘图工作。......
  • 尚硅谷rabbitmq 2024 集群ui 第49节 答疑三
    rabbitmq集群做负载均衡还要用haproxy才行吗?kafka也是这样要借助外部工具吗?是的,在RabbitMQ集群中,通常会使用HAProxy或类似的负载均衡器来分配客户端请求。这是因为RabbitMQ本身并不具备内置的负载均衡功能。HAProxy可以帮助你将客户端连接均匀地分配到不同的RabbitMQ......
  • 2024牛客暑假多校第三场 - A. Bridging the Gap 2
    思路全在注释里了:#include<cstdio>#include<cmath>#include<algorithm>usingnamespacestd;constintN=5e5+5;intn,l,r,a[N];boolSolve(){ //打工次数:一个人能将其他人运过去的次数=一个人能过去以后能往返的次数 scanf("%d%d%d",&n,&l,&r); intmin_go=c......
  • ROIR 2024
    B.双调序列题目描述我们定义一个序列\(X\)是双调的当且仅当:\(\exist1\lei\leN,满足X_1<X_2<\dots<X_i>\dots>X_N\)。求序列\(A\)有多少个子串是双调的。思路可以发现,一个序列\(X\)是双调的当且仅当\(X_1\neX_2\ne\dots\neX_N\and[X_1>X_2]\le[X_2>X_3]\le......
  • 2024CSP-J模拟赛————S12678
    禁止抄袭!!!一,赛中得分硬币(coin)100数位(digit)100划分(partition)0路径(path)0总分200二,赛中概括第一第二题30分钟做完,三四题不会。三,题目解析硬币(coin)1.1问题描述小明很喜欢 100这个数字,父母给他一些零花钱,这些零花钱的面值是 a 和 b,即小明......
  • 20222305 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    网络攻防实验报告姓名:田青学号:20222305实验日期:2024/09/29—2024/10/09实验名称:缓冲区溢出和shellcode指导教师:王志强1.实验内容本周学习内容总结:学习了系统安全(缓冲区溢出是重点)主要内容:漏洞简介:定义以及安全漏洞。BOF(缓冲区溢出):直接原因-没有严格的内存越界检查......
  • 2024.9.30 CSP
    模拟赛赛后看着分哗啦啦的往下掉。T1median找中位数,赛时假做法A了,没想到直接搜。。。code#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+5,mod=998244353;intn;inta[6][N],ans,f[6][4];unordered_map<int,bool>mp;intdfs(intp,intl,int......
  • 【springboot9735】基于springboot+vue的车辆充电桩
    主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。收藏点赞不迷路,关注作者有好处项目描述随着信息化时代的到来,管理系统都趋向于智能化、系统化,车辆充电桩管理系统也不例外,但目前国内仍都使用人工管理,市场......