首页 > 其他分享 >20240724模拟赛订正题笔记

20240724模拟赛订正题笔记

时间:2024-07-25 16:31:40浏览次数:6  
标签:stas 订正 int cov 笔记 id yss 20240724 dis

(T1)lnsyoj2208 逆流而上/P10737 [SEERC2020] Reverse Game

考虑到失败时字符串应为前面都是0,后面都是1(例如"0000001111111")
所以可以将原串的逆序对数求出,记为m,对于每个可翻转的串进行分类讨论:
1."10"->"01"可以将原串的逆序对减1。
2."100"->"001" "110"->"011" "1010"->"0101"可以将原串的逆序对减2。
综上所述,该问题变成了取石子问题。
所以当m%3==0时后手(B)胜,否则先手(A)胜。
代码如下:

#include <cstdio>
#include <cstring>
#define int long long
using namespace std;
int cnt1;
int T;
int n;
char s[1000005];
signed main(){
	scanf("%lld",&T);
	while(T--){
		scanf("%s",s+1);
		n=strlen(s+1);
		cnt1=0;
		int res=0;
		for(int i=1;i<=n;i++){
			if(s[i]=='1'){
				cnt1++;
			}
			else if(s[i]=='0'){
				res+=cnt1;
			}
		}
		if(res%3==0){
			printf("B\n");
		}
		else{
			printf("A\n");
		}
	}
	return 0;
}

(T2)lnsyoj2209 帝国飘摇/P10455 Genius Acm

未订正

(T3)lnsyoj2210 致命冲击/P5069 [Ynoi2015] 纵使日薄西山

未订正

(T4)lnsyoj2211 通天之塔/P10652 「ROI 2017 Day 1」前往大都会

此题一共有两个问,可以分别求一下:
1.对于第一问,直接跑最短路即可。
2.对于第二问,可以使用dp解决,方法如下:
设\(f_i\)为到i点时e的和的最大值
可得\(f_i=f_j+(dis_i-dis_j)^2\)
利用斜率优化dp,经过化简得\(f_{i}-dis_{i}^{2}=f_{j}+dis_{j}^{2}-2dis_{i}dis_{j}\)
由此得\(\begin{cases}x=dis_{j}\\y=f_{j}+dis_{j}^{2}\\k=2dis_{i}\\b=f_{i}-dis_{i}^{2}\end{cases}\)
因为要使\(f_i\)最大,所以应该使\(b\)最大,所以维护上凸包。
考虑\(x\)和\(k\)均单调递增,所以维护单调栈。
对于本题需要先建一个最短路图(\(dis_{u}+w_{u,v}=dis_{v}\)的边所连成的图),然后对于每个火车线分别维护一个单调栈(坑点:对于在同一条火车线但被分成两段的边需要分别开栈)。
对于所有点需要按\(dis\)进行排序,保证\(x\)和\(k\)单调,然后对于每个点,先通过经过这个点的所有铁路线算出这个点的dp,再把这个点放到经过这个点的每个铁路所维护的凸包中。
最后得出答案。
代码如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm> 
#define int long long
using namespace std;
struct Edge{
	int next;
	int to;
	int w;
	//int vi;
	int u;
}es[2000005];
int head[1000005],cnt;
vector<int> vi[1000005];
vector<int> nr[1000005];
inline void add(int u,int v,int w,int vi1){
	es[cnt].next=head[u];
	es[cnt].to=v;
	es[cnt].w=w;
	es[cnt].u=u;
	vi[vi1].push_back(cnt);
	head[u]=cnt;
	cnt++;
}
int n,m;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > pq;
struct ys{
	int dis;
	int id;
}yss[1000005];
bool cmp1(ys a,ys b){
	return a.dis<b.dis;
}
bool cmp2(ys a,ys b){
	return a.id<b.id;
}
bool vis[1000005];
int dp[1000005];
vector<int> stas[1000005];
vector<int> cov[1000005];
inline int calc(int i,int j){//yss编号 
	return dp[yss[j].id]+(yss[i].dis-yss[j].dis)*(yss[i].dis-yss[j].dis);
}
inline long double slope(int a,int b){//yss编号 
	return 1.0*(dp[yss[a].id]+yss[a].dis*yss[a].dis-dp[yss[b].id]-yss[b].dis*yss[b].dis)/\
		   (long double)(yss[a].dis-yss[b].dis);
}
int cntv;
signed main(){
	cnt=1;
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=m;i++){
		int l,u,v,w;
		scanf("%lld",&l);
		scanf("%lld",&u);
		for(int j=1;j<=l;j++){
			scanf("%lld",&w);
			scanf("%lld",&v);
			add(u,v,w,i);
			u=v;
		}
	}
	for(int i=1;i<=n;i++){
		yss[i].dis=0x3f3f3f3f3f3f3f3f;
		yss[i].id=i;
	}
	yss[1].dis=0;
	pq.push({0,1});
	while(!pq.empty()){
		int u=pq.top().second;
		pq.pop();
		if(vis[u]){
			continue;
		}
		vis[u]=true;
		for(int i=head[u];i;i=es[i].next){
			int v=es[i].to;
			if(yss[u].dis+es[i].w<yss[v].dis){
				yss[v].dis=yss[u].dis+es[i].w;
				pq.push({yss[v].dis,v});
			}
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=0;j<vi[i].size();j++){
			if(yss[es[vi[i][j]].u].dis+es[vi[i][j]].w==yss[es[vi[i][j]].to].dis){
				nr[i].push_back(vi[i][j]);
			}
		}
	}
	for(int i=1;i<=m;i++){
		if(!nr[i].empty()){
			cntv++;
			cov[es[nr[i][0]].u].push_back(cntv);
			cov[es[nr[i][0]].to].push_back(cntv);
		}
		for(int j=1;j<nr[i].size();j++){
			if(es[nr[i][j]].u!=es[nr[i][j-1]].to){
				cntv++;
				cov[es[nr[i][j]].u].push_back(cntv);
			}
			cov[es[nr[i][j]].to].push_back(cntv);
		}
	}
	sort(yss+1,yss+n+1,cmp1);
	for(int i=1;i<=n;i++){
		for(int j=0;j<cov[yss[i].id].size();j++){
			if(stas[cov[yss[i].id][j]].empty()){
				continue;
			}
			while(stas[cov[yss[i].id][j]].size()>1 && \
				  calc(i,stas[cov[yss[i].id][j]][stas[cov[yss[i].id][j]].size()-1])<\
				  calc(i,stas[cov[yss[i].id][j]][stas[cov[yss[i].id][j]].size()-2])){
				stas[cov[yss[i].id][j]].pop_back();
			}
			dp[yss[i].id]=max(dp[yss[i].id],calc(i,stas[cov[yss[i].id][j]].back()));
		}
		for(int j=0;j<cov[yss[i].id].size();j++){
			while(stas[cov[yss[i].id][j]].size()>1 && \
				  slope(i,stas[cov[yss[i].id][j]][stas[cov[yss[i].id][j]].size()-1])>\
				  slope(stas[cov[yss[i].id][j]][stas[cov[yss[i].id][j]].size()-1],stas[cov[yss[i].id][j]][stas[cov[yss[i].id][j]].size()-2])){
				stas[cov[yss[i].id][j]].pop_back();
			}
			stas[cov[yss[i].id][j]].push_back(i);
		}
	}
	sort(yss+1,yss+n+1,cmp2);
	printf("%lld %lld\n",yss[n].dis,dp[n]);
	return 0;
}

标签:stas,订正,int,cov,笔记,id,yss,20240724,dis
From: https://www.cnblogs.com/Owen1234/p/18322502

相关文章

  • Unity学习笔记之Inspector窗口可编辑的变量
     笔记:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicenumTypeEnum{Normal,Player}[System.Serializable]publicstructMyStruct{publicintages;publicboolsex;}[System.Serializable]publicc......
  • MySQL 学习笔记 进阶(存储引擎,索引上)
    存储引擎 存储引擎-MySQL体系结构连接层服务层引擎层存储层 存储引擎-简介简介:存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被成为表类型。在创建表时,指定存储引擎CREATETABLE表名(......
  • Datawhale AI 夏令营 第二期 机器学习 Task3 学习笔记 尝试使用深度学习方案
    概要:如何进行时间序列的进阶特征提取与分析如何构建深度学习方案一.时序特征的详细介绍 1.日期变量:时间序列数据通常包含日期或时间信息。这可以细分为不同的时间尺度,如年、月、周、日、小时、分钟等。在特征提取时,可以将这些日期变量转换为数值型特征,以便于模型......
  • JavaSE笔记
    目录一、JAVA基础编程二、第一阶段--JAVA基本语法2.1关键字与保留字2.2标识符2.3变量2.4运算符2.5从键盘获取输入Scanner类2.6流程控制结构2.7循环结构番外篇--软件开发流程番外篇--IDEA使用经验IDEA项目结构2.8一维数组数组的特点2.8.1声明与初始化2.8.1.1静态初始化2.......
  • cobbler学习笔记
    介绍CobblerisaversatileLinuxdeploymentservergithub链接:https://github.com/cobbler/cobbler官网:https://cobbler.github.io/文档:https://cobbler.readthedocs.io/en/latest/quickstart-guide.htmlcobblerindocker博客:https://blog.container-solutions.com/cobbl......
  • 【学习笔记】构造函数、原型对象、原型链
    在JavaScript中,每个对象都有一个原型对象,原型对象也是一个对象,它包含了对象的共享属性和方法。每个构造函数(除了箭头函数)都有一个prototype属性,该属性指向构造函数的原型对象。当我们使用构造函数创建一个新对象时,该对象会继承构造函数的原型对象中的属性和方法,这种继承关系......
  • PostgreSQL学习笔记----GUC机制
    GUC介绍在守护进程Postmaster初始化内存环境之后,需要配置Postmaster运行时所需的各种参数。GUC(GrandUnifedConfiguralion)模块实现了多种数据类型(目前有boolean、int、real、string、enum五种)的变量配置。这些参数可能会由不同的进程在不同的时机进行配置,系统会根据......
  • 【学习笔记】倍增
    【学习笔记】倍增倍增法,顾名思义就是翻倍。它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度。ST表RMQ是RangeMaximum/MinimumQuery的缩写,表示区间最大(最小)值。而ST表是用于解决可重复贡献问题的数据结构。记\(f(l,r)\)为\([l,r]\)这个区间的答案,可重......
  • 硬件开发笔记(二十八):TPS54331电源设计(一):5V电源供电原理图设计
    前言  电源供电电路设计很重要,为了更好的给对硬件设计有需求的人,特意将电源设计的基础过程描述出来。  本篇描述设计常用的12V转5V电路3A。 TPS54331(DC-DC稳压器)概述  TPS54331器件是一款28V、3A非同步降压转换器,集成有一个低RDS(on)的高侧MOSFET。为了提......
  • Tarjan(连通性相关) 笔记
    概念点(vertex)、边(edge)无向图中若图中存在两点可以到达,则称这两个点是连通的(connected)若图中任意两点都连通,则称该无向图为连通图(connectedgraph)若图\(G\)中存在一个连通子图\(H\)(\(H\subseteqG\)),没有严格更大的连通子图\(I\)使\(H\varsubsetneqqI\),则称\(H\)......