首页 > 其他分享 >2023冲刺国赛模拟8

2023冲刺国赛模拟8

时间:2023-05-31 20:13:10浏览次数:43  
标签:typedef long int 冲刺 len maxn 国赛 2023 dis

A. A

你大概能看到我发的单篇(无向图最小环问题)

code
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;

int read(){
	int x = 0; char c = getchar();
	while(!isdigit(c))c = getchar();
	do{x = x * 10 + (c ^ 48); c = getchar();}while(isdigit(c));
	return x;
}
const int maxn = 3005, inf = 0x1f1f1f1f;
int n, m;
vector<int>g[maxn];
int len; ll ans;
int dis[maxn]; ll f[maxn];
queue<int>q;
void upd(int l, ll f){
	if(len > l)len = l, ans = f;
	else if(len == l)ans += f;
}
void bfs(int s){
	for(int i = s + 1; i <= n; ++i)dis[i] = inf;
	for(int i = s + 1; i <= n; ++i)f[i] = 0;
	dis[s] = 0; f[s] = 1; q.push(s);
	while(!q.empty()){
		int x = q.front(); q.pop();
		for(int v : g[x])if(v >= s){
			if(dis[v] > dis[x] + 1){
				dis[v] = dis[x] + 1;
				f[v] = f[x];
				q.push(v);
			}else if(dis[v] == dis[x] + 1){
				upd(dis[v] + dis[x] + 1, f[v] * f[x]);
				f[v] += f[x];
			}else if(dis[v] == dis[x])upd(dis[v] + dis[x] + 1, f[v] * f[x]);
		}
	}
}
int main(){
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	n = read(), m = read();
	for(int i = 1; i <= m; ++i){
		int u = read(), v = read();
		g[u].push_back(v); g[v].push_back(u);
	}
	len = INT_MAX;
	for(int i = 1; i <= n; ++i)bfs(i);
	if(len & 1)ans /= 2;
	printf("%lld\n",ans);
	return 0;
}

B. B

这个啊,对每种字母维护出现位置,询问离线

枚举答案,左右端点分别排序双指针找对应位置,前缀和得到答案

有一小点细节。

code
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;

int read(){
	int x = 0; char c = getchar();
	while(!isdigit(c))c = getchar();
	do{x = x * 10 + (c ^ 48); c = getchar();}while(isdigit(c));
	return x;
}
const int maxn = 1.5e6 + 55, inf = 0x3f3f3f3f;
char s[maxn];
int n, m, sum[maxn];
vector<int>pos[26];
vector<pii>L, R, tmp;
struct ANS{
	int len; char x, y;
	ANS(){len = 0;}
	void upd(int l, char a, char b){
		if(l > len)len = l, x = a, y = b;
		else if(l == len){
			if(a < x)x = a, y = b;
			else if(a == x && b < y)y = b;
		}
	}
	void print(){printf("%d %c%c\n",len, x, y);}
}ans[maxn];
int rl[maxn], rr[maxn], res[maxn];

int main(){
	freopen("b.in","r",stdin);
	freopen("b.out","w",stdout);
	scanf("%s", s + 1); n = strlen(s + 1);
	for(int i = 1; i <= n; ++i)pos[s[i] - 'a'].push_back(i);
	m = read();
	for(int i = 1; i <= m; ++i)L.push_back(pii(read(), i)), R.push_back(pii(read(), i));
	sort(L.begin(), L.end()); sort(R.begin(), R.end());
	for(int a = 0; a < 26; ++a)
		for(int b = a + 1; b < 26; ++b){
			if(!pos[a].size() && !pos[b].size())continue;
			int pa = 0, pb = 0; tmp.clear();
			while(pa < pos[a].size() && pb < pos[b].size()){
				if(pos[a][pa] < pos[b][pb])tmp.push_back(pii(pos[a][pa], 0)), ++pa;
				else tmp.push_back(pii(pos[b][pb], 1)), ++pb;
			}
			while(pa < pos[a].size())tmp.push_back(pii(pos[a][pa], 0)), ++pa;
			while(pb < pos[b].size())tmp.push_back(pii(pos[b][pb], 1)), ++pb;
			sum[0] = 1; for(int i = 1; i < tmp.size(); ++i)sum[i] = sum[i - 1] + (tmp[i].second ^ tmp[i - 1].second);
			int p = 0;
			for(int i = 0; i < m; ++i){
				int l = L[i].first;
				while(p < tmp.size() && tmp[p].first < l)++p;
				rl[L[i].second] = p;
			}
			p = 0;
			for(int i = 0; i < m; ++i){
				int r = R[i].first;
				while(p < tmp.size() && tmp[p].first <= r)++p;
				rr[R[i].second] = p - 1;
			}
			for(int i = 1; i <= m; ++i)if(rl[i] <= rr[i] && rr[i] >= 0 && rl[i] < tmp.size()){
				ans[i].upd(sum[rr[i]] - sum[rl[i]] + 1 - tmp[rl[i]].second, a + 'a', b + 'a');
				ans[i].upd(sum[rr[i]] - sum[rl[i]] + 1 - (tmp[rl[i]].second ^ 1), b + 'a', a + 'a');
			}
		}
	for(int i = 1; i <= m; ++i)ans[i].print();
	return 0;
}

C. C

愚者之夜

\(lxl\) 良(du)心(liu) 数据结构

标签:typedef,long,int,冲刺,len,maxn,国赛,2023,dis
From: https://www.cnblogs.com/Chencgy/p/17447193.html

相关文章

  • 2023冲刺国赛模拟9
    A.哈密顿路考虑哈密顿路一定经过\(1\),那么在这里断开\(f_s\)表示已经走过的点集为\(s\),能作为最后一个点出现的点的集合然后拼起来即可code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefpair<int......
  • 2023湘潭邀请赛 E(容斥)
    题目跳转:E题意:输入x,k,求大小为k的不同集合个数,其中所有数的gcd+lcm=x。思路:AC代码://-----------------#include<bits/stdc++.h>#definexxfirst#defineyysecond#defineIOSios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);#definefixedf......
  • 【2023 · CANN训练营第一季】——应用开发深入讲解——模型转换的ATC工具
    前言: 做一个推理应用,首先从模型转换开始(当然先得选好一个合适的模型)。在昇腾平台做模型推理,需要将Caffe,TensorFlow等开源框架网络模型转换成Davinci架构专用模型(OM格式)。昇腾张量编译器(AscendTensorCompiler,简称ATC)是异构计算架构CANN体系下的模型转换工具,模型转换过程中,ATC会进......
  • 【2023 · CANN训练营第一季】——开发者套件进阶,玩转智能小车课程笔记
    前言:基于新款开发者套件Atlas200IDKA2的智能小车,采用人工智能的方法,对摄像头采集到实时影像进行推理,产生电机等运动机构的控制指令,在特定环境里,实现自动行驶、自动泊车、目标跟踪等功能。昇腾官方开源了“玩”小车的全部软、硬件资料,还准备了模拟环境,让还没有小车的小伙伴体验自......
  • 某书x-s算法(2023-05-30更新)
     服务器2023-05-30更新了x-s算法,主要位置如下: 将其全部复制下来,放入浏览器测试(HTML代码如下):<!DOCTYPEhtml><html><head><metacharset="utf-8"/><title>X-s,X-t算法测试,技术支持:V:byc6352,日期:2023-5-31</title><scriptsrc="xs.j......
  • 2023广东省程序设计大赛F题
    思路:我们把先把所有状态和值用线段树或树状数组记录下来(因为他是连续的区间,相当于一段区间的不同状态的和)再通过二分或者倍增找出这段区间及找出左右端点1:线段树或者着树状数组维护的有两个,一个是前缀和(不管状态),一个是颜色和就是状态2:左右端点查找:一个点对应一个颜色,我们假设从......
  • pkusc2023 d1t3
    整自闭了,快一个月后才想出来怎么做。设点\(i\)是1的概率为\(p_i\),定义\(P_i(x)=1-p_i+p_ix\)。那么\(p_i\)是\(i\)的儿子节点和自己的\(P(x)\)卷起来后取后一半的系数和。树上修改很魔怔,考虑ddp。维护每个点轻儿子和自己的\(\prodP(x)\),记为\(S_i(x)\),设一共有......
  • 【2023 · CANN训练营第一季】——搭建环境:创建ECS,下载sample仓
    前言:        本文是环境搭建的第一篇笔记。主要包括下面两方面内容:    1、在华为云上创建ECS服务器,并修改Ubuntu源和pip源为国内镜像地址。        2、为了更好的使用ECS,需要在本地安装远程连接和查看代码的工具软件,以Windows为例介绍几个常用的工具软件。......
  • CVE-2023-33246学习
    1.参考学习CVE-2023-33246https://github.com/I5N0rth/CVE-2023-332462.本地搭建环境2.1下载镜像#dockerpullapache/rocketmq:4.9.1#dockerpullapacherocketmq/rocketmq-console:2.0.02.2启动broker、namesrv、console启动namesrvdockerrun-dit-p9876:987......
  • 西门康IGBT模块存在sql注入 QTVA-2023-3632489
    网址:http://www.gl-igbt.com/product.php?id=6 漏洞描述: 西门康igbt模块,采购平台,便捷购买,专业代理,售后无忧,大量现货供应,模块齐全,可直接供货,一键下单,整流桥功率,西门康一站式采购平台,可长期稳定供货 西门康IGBT模块存在sql注入漏洞,攻击者可利用该漏洞获取数据库......