首页 > 其他分享 >11/8训练笔记

11/8训练笔记

时间:2023-11-08 19:26:01浏览次数:34  
标签:11 训练 int 笔记 a1 ++ vector mp include

P6273[eJOI2017] 魔法 题解

考虑定义\(S_{r_k} = \Sigma_{i = 1}^{r}[s_i = k]\),那么对于任意一个子串\([l,r]\),其为有魔法的子串的充要条件为\(S_{c_{r}} - S_{c_{l - 1}}\)对于任意的,在\(s\)中出现了的\(c\)为定值。

任取一个在\(s\)中出现了的字符\(A\),那么上述充要条件可转换为\(S_{c_{r}} - S_{c_{l - 1}} = S_{A_{r}} - S_{A_{l - 1}}\)对于\(s\)中出现的每个字符\(c\)都成立。

移项,得\(S_{c_{r}} - S_{A_{r}} = S_{c_{l - 1}} - S_{A_{l - 1}}\)

拿一个vector<int>维护\({S_{c_{r}} - S_{A_{r}}|c \in S}\)即可

时间复杂度\(O(nklogn)\)

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
#include<map>
using namespace std;
int cnt1[100010],cnt[266],n,k,now,ans;
string s;
map<vector<int>,int> mp;
vector<int> v;
char a1[100010];
int main()
{
	cin >> n >> s;
	s = s;
	strcpy(a1,s.c_str());
	sort(a1,a1 + n);
	mp[v = (vector<int>(k = unique(a1,a1 + n) - a1,0))] = 1;
	for(int i = 0;i < n;i++) {
		if(s[i] != a1[0]) {
			v[lower_bound(a1,a1 + k,s[i]) - a1]++;
		} else {
			for(auto &j:v) {
				j--;
			}
			v[0]++;
		}
		((ans += mp[v]++) %= (int)(1e9 + 7));
	}
	cout << ans << "\n";
}

标签:11,训练,int,笔记,a1,++,vector,mp,include
From: https://www.cnblogs.com/IANYEYZ/p/17818091.html

相关文章

  • 231108校内赛
    T1最大公约数数据极水,啥都能过第一种方法,暴力剪枝,直接飞过,\(\mathcalO(N^2\logn)\)过\(30\)万不解释玛德有人在提交时不写输出直接爆零#include<bits/stdc++.h>#defineN300010usingnamespacestd;intn,k,ans,a[N];intgcd(inta,intb){ returnb==0?a:gcd(b,......
  • 11月7日css介绍、基本格式、样式、选择器
    目录1.css介绍2.css基本格式3.css的几种引入方式1.行内样式2.内部样式3.外部样式css选择器基本选择器1.元素(标签)选择器2.id选择器3.类选择器通用选择器组合选择器1.后代选择器2.子元素选择器3.相邻兄弟选择器通用兄弟选择器属性选择器分组选择器伪类选择器第一个实例给未访问的链......
  • electron+vite笔记
    1、配置国内electron 镜像   .npmrc   electron_mirror=https://registry.npmmirror.com/-/binary/electron/  electron_builder_binaries_mirror=https://registry.npmmirror.com/-/binary/electron-builder-binaries/2、创建vite项目    pnpmcreate......
  • C++笔记 -- 使用STL的function实现回调机制(回调函数)
    1.使用普通函数示例一 代码:#include<iostream>#include<functional>//定义一个回调函数类型usingCallback=std::function<void(int)>;//定义一个函数,用于演示回调函数的使用voidperformOperation(intdata,Callbackcallback){//执......
  • win11不能打开gpedit.msc
    创建文件test.cmd,然后把以下代码复制到此文件,然后用管理员身份运行就可以打开gpedit.msc@echooffpushd"%~dp0"dir/bC:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum>List.txtdir/bC:\Windows\servicing\Packages\M......
  • 【2023.11.08】NOIP2023模拟试题-30
    前言数论迎我归,数学送我葬组合数学不容易,又有DP当T3刚爆零,T4又遭殃OI路上怅前望,且行且彷徨T1最大公约数T1应该想一想就会,接下来我们讨论是怎么减去他的复杂度的。题目的关键在于,如果根据给出的\(a\)推出\(\gcd\)的话,就会有\(9\times10^{10}\)条推导关系。而......
  • kafka第二天学习笔记
    第二天学习Kafka,我们继续深入了解这个分布式流处理平台的核心概念和功能。以下是一些重要的知识点和概念:Kafka的消费者组:消费者组是多个消费者实例的组合,可以共同消费一个topic中的消息。消费者组中的每个消费者会均匀分配topic中的消息,实现负载均衡和高可用性。Kafka的分区策略:当......
  • 2023_11_08_Idea常用的快捷键
    一、常用快捷键Ctrl+F12弹出当前文件结构层(类的方法属性等),可以在弹出的层上直接输入,进行筛选Ctrl+左键单击在打开的文件标题上,弹出该文件路径Ctrl+N根据输入的类名查找类文件Ctrl+D复制光标所在行或复制选择内容,并把复制内容插入光标位置下面Ctrl+P方法......
  • 11.8读书笔记《需求掌握过程》02
    所谓需求,就是那些必须在开始进行产品构建前发现的东西,如果在构建的过程中才发现需求,或者更晚更糟,直至客户已经在使用产品的时候才发现需求,那么代价将会是很大的,效率也将十分低下。《掌握需求过程》这本书中,讲述了身为一个需求分析师,应完成的几个工作内容。按书中所说,分析师即......
  • 软件测试|Chrome 115之后的版本,如何更新driver?
    问题描述前两天在运行一个web自动化测试脚本时,报了如下的错误,ThisversionofChromeDriveronlysupportsChromeversion113Currentbrowserversionis115.0.5790.110withbinary,如下图所示:该报错提示我,当前的driver只支持113版本的Chrome浏览器,但是我的Chrome已经自动......