2025.1.4 Hello 2025

比赛链接

Solved: 5/9

Upsolved: 6/9

Rank: 542


搞了个很长的大头,之后贴代码都不贴大头了。

#include<bits/stdc++.h>
using namespace std;
using ui=unsigned; using db=long double; using ll=long long; using ull=unsigned long long; using lll=__int128;
using pii=pair<int,int>; using pll=pair<ll,ll>;
template<class T1, class T2> istream &operator>>(istream &cin, pair<T1, T2> &a) { return cin>>a.first>>a.second; }
template<class T1> istream &operator>>(istream &cin, vector<T1> &a) { for (auto &x:a) cin>>x; return cin; }
template<class T1> istream &operator>>(istream &cin, valarray<T1> &a) { for (auto &x:a) cin>>x; return cin; }
template<class T1, class T2> bool cmin(T1 &x, const T2 &y) { if (y<x) { x=y; return 1; } return 0; }
template<class T1, class T2> bool cmax(T1 &x, const T2 &y) { if (x<y) { x=y; return 1; } return 0; }
istream &operator>>(istream &cin, lll &x) { x=0; static string s; cin>>s; for (char c:s) x=x*10+(c-'0'); return cin; }
ostream &operator<<(ostream &cout, lll x) { static char s[60]; int tp=1; s[0]='0'+(x%10); while (x/=10) s[tp++]='0'+(x%10); while (tp--) cout<<s[tp]; return cout; }
#define all(x) (x).begin(),(x).end()
const int mod = 998244353;
const ll inf=4e18;
ll qpow(ll x,ll y=mod-2,int m=mod){ll r=1;for(;y;y>>=1,x=x*x%m)if(y&1)r=r*x%m;return r;}void solve(){}int main(){ios::sync_with_stdio(false);cin.tie(0);int T;cin>>T;//while(T--)cout<<(solve()?"YES":"NO")<<'\n';while(T--)solve();
}

A. MEX Table

题意:将 \(0\)\(nm-1\) 排成一个 \(n\times m\) 矩阵,使行 mex 之和加列 mex 之和最大。

注意到 0 所在行列之外的 mex 均为 0,所以只需让 0 所在行或列 mex 取到 \(n\)\(m\),另一个 mex 取 \(1\)

void solve(){int n,m;cin>>n>>m;cout<<max(n,m)+1<<'\n';
}

B. Gorilla and the Exam

题意:给一个序列,任意修改其中 \(k\) 个数,使得出现的不同的数最少。

按出现次数从小到大排序,改成出现次数最多的数。

void solve(){int n,k;cin>>n>>k;vector<int> a(n);cin>>a;if(n==k){cout<<"1\n";return;}map<int,int> cnt;for(int i=0;i<n;i++)cnt[a[i]]++;int ans=0;vector<int> b;for(auto x:cnt)b.push_back(x.second);sort(all(b));int m=b.size(),res=m;for(int i=0;i<m;i++){if(k<b[i])break;k-=b[i];--res;}cout<<res<<'\n';
}

C. Trip to the Olympiad

题意:给定区间 \([l,r]\),从中选取三个不同的整数 \(a,b,c\),使 \((a\oplus b) + (b\oplus c) + (c\oplus a)\) 最大。

尽量使每一位都同时出现 0 和 1。直接令 \(a=l,c=r\),从高到低考虑 \(b\) 的二进制位:

  • \(l\)\(r\) 的某位相同,且之前未出现过不同,则 \(b\) 也只能与 \(l\)\(r\) 相同;

  • \(l\)\(r\) 的某位相同,且之前出现过不同,则 \(b\)\(l\)\(r\) 不同;

  • \(l\)\(r\) 的某位不同,且之前未出现过不同,则一定是 \(l\) 的这一位是 \(0\)\(r\) 的这一位是 \(1\)。此时找到这一位之后最高的相同位,若为 \(0\) 则表示 \(b\) 的这一位是 \(1\),倒推回来当前位只能是 \(0\)(否则将大于 \(r\)),为 \(1\) 同理;

  • \(l\)\(r\) 的某位不同,且之前出现过不同,则取与第一次不同的位相反的数即可。

void solve(){ll l,r;cin>>l>>r;ll a=l,c=r,b=0;int o=__lg(r);bool fl=1;int t=0;for(int i=o;i>=0;--i){int x=l>>i&1,y=r>>i&1;if(x==y){if(fl)b|=x<<i;else b|=(x^1)<<i;}else{if(fl){for(int j=i;j>=0;--j)if((l>>j&1)==(r>>j&1)){t=l>>j&1;break;}b|=t<<i;fl=0;}else b|=(t^1)<<i;}}cout<<a<<' '<<b<<' '<<c<<'\n';
}

D. Gifts Order

题意:维护一个序列,支持单点修改,全局查询区间极差减区间长度的最大值。

首先最优区间一定左端点和右端点分别为最大和最小值。

若左端点为最大值,则答案是 \(a_l-a_r-r+l=(a_l+l)-(a_r+r)\);若右端点为最大值,则答案是 \(a_r-a_l-r+l=(a_r-r)-(a_l-l)\)

\(b_i=a_i-i,c_i=a_i+i\),则答案是 \(\max\{\max_{l<r}b_r-b_l,\max_{l<r}c_l-c_r\}\)

对于单点修改,我们可以用线段树维护区间最大值、区间最小值和区间答案。

#define lc (x<<1)
#define rc (x<<1|1)
#define mid ((l+r)>>1)const int N=2e5+5;
int n,q,x,y,a[N],b[N],c[N];
int mxb[N*4],mnb[N*4],mxc[N*4],mnc[N*4],ansb[N*4],ansc[N*4];
void pushup(int x){mxb[x]=max(mxb[lc],mxb[rc]), mnb[x]=min(mnb[lc],mnb[rc]);mxc[x]=max(mxc[lc],mxc[rc]), mnc[x]=min(mnc[lc],mnc[rc]);ansb[x]=max(max(ansb[lc],ansb[rc]),mxb[rc]-mnb[lc]);ansc[x]=max(max(ansc[lc],ansc[rc]),mxc[lc]-mnc[rc]);
}
void build(int x,int l,int r){if(l==r){mxb[x]=mnb[x]=b[l];mxc[x]=mnc[x]=c[l];ansb[x]=ansc[x]=0;return;}build(lc,l,mid);build(rc,mid+1,r);pushup(x);
}
void update(int x,int l,int r,int pos,int vb,int vc){if(l==r){mxb[x]=mnb[x]=vb;mxc[x]=mnc[x]=vc;ansb[x]=ansc[x]=0;return;}if(pos<=mid)update(lc,l,mid,pos,vb,vc);else update(rc,mid+1,r,pos,vb,vc);pushup(x);
}void solve(){cin>>n>>q;for(int i=1;i<=n;++i)cin>>a[i],b[i]=a[i]-i,c[i]=a[i]+i;build(1,1,n);cout<<max(ansb[1],ansc[1])<<'\n';while(q--){cin>>x>>y;b[x]=y-x,c[x]=y+x;update(1,1,n,x,b[x],c[x]);cout<<max(ansb[1],ansc[1])<<'\n';}
}

E. Another Exercise on Graphs

题意:给一张无向图,多次询问 \(x\)\(y\) 的所有路径中第 \(k\) 大边的最小值。\(n\leq 400\)

最小化第 \(k\) 大一类问题我们有经典的二分做法,将所有小于等于 \(x\) 的边视为 \(0\),大于 \(x\) 的边视为 \(1\),然后求最短路。
但直接套用到本题复杂度是 \(O(qm\log w)\) 甚至连 E1 都过不去。

答案仅可能是某条边的边权,我们考虑从小到大动态加边并维护“将大于当前边权视为 \(1\) 小于等于当前边权视为 \(0\)”的 dis 数组。

每加入一条边相等于将一条 \(1\) 边变为 \(0\) 边,这相当于对所有点对进行一次松弛,需要 \(O(n^2)\) 更新。

本题 \(m=O(n^2)\) 所以直接做是 \(O(n^4)\) 仍然无法通过。但注意到有效松弛(会改变 dis 的松弛)只有 \(n-1\) 次,因此同时维护一个并查集,只有加入不同集合的边时才进入松弛,复杂度就降到了 \(O(n^3)\)

const int N=405,M=3e5+5;
int n,m,q,x,y,z,dis[N][N],ans[N][N][N];
struct node{int x,y,z;}buc[M],que[M];int fa[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}void solve(){cin>>n>>m>>q;for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)if(i!=j){dis[i][j]=inf;for(int k=1;k<=n;++k)ans[i][j][k]=inf;}for(int i=1;i<=m;i++){cin>>x>>y>>z;dis[x][y]=dis[y][x]=1;buc[i]={x,y,z};}for(int k=1;k<=n;++k)for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)cmin(dis[i][j],dis[i][k]+dis[k][j]);sort(buc+1,buc+m+1,[](node a,node b){return a.z<b.z;});for(int i=1;i<=q;++i)cin>>x>>y>>z,que[i]={x,y,z};for(int i=1;i<=n;++i)fa[i]=i;for(int i=1;i<=m;++i){int x=buc[i].x,y=buc[i].y;int xx=find(x),yy=find(y);if(xx!=yy){for(int j=1;j<=n;++j)for(int k=1;k<=n;++k){cmin(dis[j][k],min(dis[j][y]+dis[x][k],dis[j][x]+dis[y][k]));if(dis[j][k]<=n&&ans[j][k][dis[j][k]+1]>=inf)ans[j][k][dis[j][k]+1]=buc[i].z;}fa[xx]=yy;}}for(int i=1;i<=q;++i)cout<<ans[que[i].x][que[i].y][min(n,que[i].z)]<<' ';cout<<'\n';
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Easysearch 可搜索快照功能,看这篇就够了

可搜索快照功能改变了我们对备份数据的查询方式。以往要查询备份数据时,要先找到备份数据所在的快照,然后在一个合适的环境中恢复快照,最后再发起请求查询数据。这个处理路径很长,而且很消耗时间。可搜索快照功能将大大简化该处理路径,节约时间。 角色设置 相信你对节点角…

基本共射极放大电路的分析

静态分析利用直流通路求Q点(静态工作点)\[I_{BQ}=\frac{V_{BB}-V_{BEQ}}{R_{b}} \]一般硅管\(V_{BE}=0.7V\),锗管\(V_{BE}=0.2V\),\(\beta\)已知 \[I_{CQ}=\beta I_{BQ} \]\[V_{CEQ}=(\frac{V_{CC}-I_{CQ}}{R_{c}}-I_{CQ})R_L \]动态分析交流通路分析画小信号等效模型\[r_{…

使用扣子实现营销获客套电机器人-工作流+多维表格+飞书机器人

V+: llike620 就是利用扣子的工作流,实现简单的获取线索机器人,然后对接在抖音音私信上 主要用于某汽车贴膜产品的获客,先获取车型,再获取联系方式增加了状态机制,不能让对方跳过业务流程新线索存入飞书多维表格,并通过飞书机器人进行通知 十年开发经验程序员,离职全心…

Qt配置和功能使用说明

1、执行qmake qmake 是 Qt 提供的一个构建工具,用于简化跨平台 Qt 应用的构建流程。它通过读取 .pro 文件生成适合目标平台的构建文件,例如 Makefile(windows & linux) 或 Visual Studio 工程文件(windows)2、Shadow Build(影子构建) Shadow Build 是 Qt Creator 提…

静态工作点对波形失真的影响

一、截止失真原因:当静态工作点设置过低,即\(I_{BQ}\)过小,\(V_{CEQ}\)过大时,输入信号的负半周可能会使晶体管进入截止区。 现象:输出波形的正半周被削顶,即正半周顶部被“切掉”一部分,这是因为在截止区,晶体管的集电极电流\(i_C\)几乎为零,不能跟随输入信号的变化而…

基本共射极放大电路

以下是关于基本共射极放大电路的详细介绍: 电路结构由晶体管(通常是BJT)、直流电源\(V_{CC}\)、基极偏置电阻\(R_b\)、集电极负载电阻\(R_c\)、输入电容\(C_1\)、输出电容\(C_2\)以及输入信号源\(v_s\)和负载电阻\(R_L\)组成。工作原理直流偏置:通过\(R_b\)和\(V_{CC}\)为晶…

20241322 《计算机基础与程序设计》课程总结

2024-2025-1 20241322 《计算机基础与程序设计》第十五周学习总结 作业信息 |这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP| |这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK15| |这个作业的目标|课程总结,文中的链…

《docker基础篇:7.Docker容器数据卷》包括坑、回顾下上一讲的知识点,参数V、是什么、更干嘛、数据卷案例

《docker基础篇:7.Docker容器数据卷》包括坑、回顾下上一讲的知识点,参数V、是什么、更干嘛、数据卷案例@目录7.Docker容器数据卷7.1坑7.2 回顾下上一讲的知识点,参数V7.3 是什么7.4 能干嘛7.5 数据卷案例7.5.1 宿主vs容器之间映射添加容器卷7.5.2 读写规则映射添加说明7.5.…

DIY笔记本散热器

前言我用的笔记本是R9000P 2021H,用了快三年才发现笔记本发热量有点高,GPU 3070倒是还好不用担心过热的问题,主要是这个CPU 5800H非常积热。最近也是清完灰、涂硅脂、换完风扇了,双烤测试了下功耗能到200W但是CPU有大概70C往上的样子,考虑到这是冬季测试下的结果,这个成绩…

BJT的共射极伏安特性曲线

BJT(双极型晶体管)共射极的伏安特性曲线包括输入特性曲线和输出特性曲线,以下是详细讲解:输入特性曲线定义:描述基极电流\(i_B\)与基极-发射极电压\(v_{BE}\)之间的关系,通常以集电极-发射极电压\(v_{CE}\)为参变量,即\(i_B = f(v_{BE})|_{v_{CE}=constant}\)。 曲线形状…

检索增强生成和思维链结合: 如何创建检索增强思维链 (RAT)?

论文地址:https://arxiv.org/pdf/2403.05313 Github地址:https://github.com/CraftJarvis/RAT 想象一下,一个人工智能助手可以像莎士比亚一样写作,像专家一样推理。这听起来很了不起,对吧?但是,如果这个助手有时难以确保事实准确性,依赖过时的信息或只是编造事实,该怎…