20240917【省选】模拟

news/2024/10/21 21:08:55

难说

T1

暴力可以写dp

只要你学过线性基那么你就会想怎么用线性基做,显然是要套点数据结构维护的。你要知道两个线性基可以在 \(O(\log^2 n)\) 的时间内合并,得到的线性基是原来两个的交。可以用线段树维护,复杂度 \(O((n+q)\log n\log^2 a)\),难说能不能过。

没有修改,所以考虑用常熟小一点的数据结构,可以用ST表维护最值,复杂度 \(O(n\log n\log^2 a+q\log^2 a)\),小了一点。

发现瓶颈在于 \(\log^2 a\) 的合并,看能不能优化成一个老哥。一个简单的思路是分治,把询问离线下来,处理跨过中点的询问,就只会对线性基产生 \(O(n\log n)\) 次的修改,复杂度被优化成 \(O(n\log n\log a+q\log^2 a)\),好像能过了。

然后是正解,看不懂:

啥都能扫描线(

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll int
#define in inline
const ll N=1145140,M=1919810,inf=2e9,V=29;
ll n,Q,a[N],f[N],p[N],x;
ll ans[N];
struct xx{ll l,r,d,id;
}q[N];
bool cmp(xx x,xx y){return x.r<y.r;
}
bool flag;
void insert(ll x,ll id){for(ll i=V;i>=0;--i)if(x&(1ll<<i)){if(!f[i]){f[i]=x,p[i]=id;return;}else{if(id>p[i]){swap(id,p[i]);swap(x,f[i]);}x^=f[i];}}flag=1;
}
ll qmax(ll d,ll l){for(int i=V;i>=0;--i)if(p[i]>=l) d=max(d,d^f[i]);return d;
}
int main(){ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);n=read();for(int i=1;i<=n;++i) a[i]=read();Q=read();for(int i=1;i<=Q;++i) q[i].l=read(),q[i].r=read(),q[i].d=read(),q[i].id=i;//cin>>q[i].l>>q[i].r>>q[i].d,q[i].id=i;sort(q+1,q+Q+1,cmp);for(int i=1,j=1;i<=Q;++i){while(j<=q[i].r){insert(a[j],j);++j;}ans[q[i].id]=qmax(q[i].d,q[i].l);}for(int i=1;i<=Q;++i) write(ans[i]),putchar('\n');return 0;
}

T2

应该冲正解的,这个题其实真的挺简单的,就是建图。你会发现一个点能早到就尽量早到,不会因为可能错开车而使得时间不优。注意不需要在不同线路之间建边。

对每条线路把这个环建出来,每天边要记录 \(u\) 在线路中的下标(从 \(0\) 开始)和线路的长度用于计算到达时间。用 dij和SPFA 都行,但松弛过程中边权是根据 \(u\) 在线路中的位置和 \(dis[u]\) 确定的,具体看代码,很容易手推出来。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define eb emplace_back
#define pi pair<ll,ll>
const ll N=2*114514,M=1919810,inf=1e18;
ll n,m,t[N];
struct xx{ll v,t,le;
};
ll dis[N];
bool vis[N];
vector <xx> g[N];
priority_queue <pi,vector<pi>,greater<pi>> q;
void dij(){memset(dis,63,sizeof(dis));dis[1]=0,q.push({dis[1],1});while(!q.empty()){ll u=q.top().second; q.pop();if(vis[u]) continue;vis[u]=1;for(xx x:g[u]){ll v=x.v,t=x.t,le=x.le,w=0;if(dis[u]%le<=t) w=t-dis[u]%le+1;else w=le-dis[u]%le+t+1;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;q.push({dis[v],v});}}}
}
int main(){ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);cin>>n>>m;for(int i=1;i<=m;++i){cin>>t[i];vector <ll> a;for(int j=1,x;j<=t[i];++j) cin>>x,a.eb(x);for(int j=0;j<t[i];++j) g[a[j]].eb((xx){a[(j+1)%t[i]],j,t[i]});}dij();for(int i=2;i<=n;++i)if(dis[i]==dis[0]) cout<<"-1 ";else cout<<dis[i]<<" ";return 0;
}

T3

智慧题。但是本来是把结论都推出来了,39pts的代码也打出来了,但是连犯两个最低级的错误,然后就没了。

不会。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74353.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

高级语言程序设计课程第四次个人作业

班级:https://edu.cnblogs.com/campus/fzu/2024C 作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13293 学号:102400118 姓名:林嘉祚 6.16.16.16.56.16.76.16.86.16.96.16.106.16.126.16.136.16.156.16.166.16.187.12.17.12.27.12.47.12.57.12.67.12.77.12.87.12.97…

2024Ciscn总决赛Web Writeup

前言 鸽了三个月的复现计划:) ezjs 考点是express引擎解析的一个trick,在高版本的express已经修复,先贴源码 const express = require(express); const ejs=require(ejs) const session = require(express-session); const bodyParse = require(body-parser); const multer =…

C# 新建的类库无法添加 System.Drawing 引用问题

C#类库添加System.Drawing引用时,选择程序集 -> 框架 -> 再搜索对应的库,添加引用就可以了。不要在COM中搜索。

20222420 2024-2025-1 《网络与系统攻防技术》实验二实验报告

20222420 2024-2025-1 《网络与系统攻防技术》实验二实验报告 1.实验内容 1.1 本周学习内容 1.1.1 后门介绍后门概念:不经过正常认证流程而访问系统的通道 后门类型:编译器、操作系统、应用程序中的后门,潜伏于OS或伪装成APP的后门程序1.1.2 后门案例编译器后门:Xcode 操作…

tms fnc ui

tms fnc uitms fnc ui 这组界面控件,支持DELPHI的VCL和FMX,还支持FPC的LCL。 1)TTMSFNCNavigationPanel2)TTMSFNCTileList3)本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18490245

第6课 测试用例设计

1.黑盒测试方法2.白盒测试方法术语一: • 动态测试(dynamic testing):通过运行软件的组 件或 系统来测试软件 • 静态测试(static testing):对组件的规格说明书 进行 评审,对静态代码进行走查 • 正式评审(formal review):对评审过程及需求文 档的 一种特定评审 • …

转载 兔兔电脑机器码修改工具1.0

使用说明: 1.关闭**毒软件(1.易语言编写可能会误报 2.需要修改系统信息可能会被拦截); 2.管理员运行; 3.根据需要修改机器码(部分系统需要运行兼容性初始化) 4.修改主板会屏蔽网卡,所以要先修改网卡然后再修改主板; 5.重启电脑即可恢复,网卡修改不会恢复,需要手动改…