ABC392
终于进前一千了。
A - Shuffled Equation
人话:给定三个数
数很小,if
判断一下,long long
也不用开。
点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
int a,b,c;
int main(){
cin>>a>>b>>c;
if(a*b==c)cout<<"Yes"<<endl;
else if(b*c==a)cout<<"Yes"<<endl;
else if(c*a==b)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
时间复杂度
B - Who is Missing?
注意到值域很小,我们开一个桶。如果
然后按照
点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
int n,m,x,t[1005],cnt;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>x,t[x]++;
for(int i=1;i<=n;i++)if(!t[i])cnt++;
cout<<cnt<<endl;
for(int i=1;i<=n;i++)if(!t[i])cout<<i<<" ";
return 0;
}
时间复杂度
C - Bib
挺绕的。
每个人有三个属性,编号,牌子(也就是
假设
那么根据定义,牌子为
主要是搞清楚编号,牌子,看的人之间的关系即可。
点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N=3e5+10;
int n,p[N],q[N],s[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",q+i);
}
for(int i=1;i<=n;i++){
scanf("%d",s+i);
p[s[i]]=i;
}
for(int i=1;i<=n;i++){
printf("%d ",s[q[p[i]]]);
}
return 0;
}
时间复杂度
D - Doubles
咋还卡人精度呢?
先思考暴力,枚举两个骰子
暴力会超时,注意值域很小,我们先枚举
接着我们枚举每一个
枚举
容易发现后两步合起来是
点击查看代码
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N=1e5+10;
vector<int>v[105];
int n;
long long k[105],cnt[N];
long double res,ans;
long double fmax(long double a,long double b){
return a<b?b:a;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",k+i);
for(int j=1,x;j<=k[i];j++){
scanf("%d",&x);
v[i].push_back(x);
}
}
for(int i=2;i<=n;i++){
for(auto u:v[i])cnt[u]++;
for(int j=1;j<i;j++){
res=0;
for(auto u:v[j])res=(double)(res+cnt[u]);
res=(long double)(res/(k[i]*k[j]));
ans=max(ans,res);
}
for(auto u:v[i])cnt[u]--;
}
printf("%.12LF\n",ans);
return 0;
}
时间复杂度
E - Cables and Servers
小清新题。
注意到
我们先把原图建出来,这样的图是若干个不连通的图。在原图中,有一些边是无关紧要的,去掉这一条边对原图联通性没有影响。我们可以用这些边来连接其他的联通块。
我们思考这样一个过程:划分联通块,然后找出每个联通块有多少个无用的边,统计当前那个联通块
容易发现,此时
考虑构造方案,我们把每个联通块排好序后,将每个联通块内的无用边按照同样顺序放进数组里,然后从前往后一条一条边的用即可。
点击查看代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int N=2e5+10;
int n,m,a[N],b[N],f[N],rt[N],k,rest[N],p,mk[N];
vector<int>vec[N];
int found(int x){
return f[x]==x?x:f[x]=found(f[x]);
}
bool cmp(int a,int b){
return vec[a].size()>vec[b].size();
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=m;i++){
scanf("%d %d",a+i,b+i);
int u=found(a[i]);
int v=found(b[i]);
if(u!=v)f[u]=v;
else mk[i]=1;
}
for(int i=1;i<=m;i++)if(mk[i])vec[found(a[i])].push_back(i);
for(int i=1;i<=n;i++)if(found(i)==i)rt[++k]=i;
printf("%d\n",k-1);
sort(rt+1,rt+1+k,cmp);
for(int i=1;i<=k;i++)for(auto j:vec[rt[i]])rest[++p]=j;
for(int i=2;i<=k;i++){
printf("%d %d %d\n",rest[i-1],a[rest[i-1]],rt[i]);
}
return 0;
}
时间复杂度
F - Insert
平衡树板子,蚌埠住了。
考虑无旋 treap(FHQ treap),每个节点上维护一个权值,和子树的大小,插入第
点击查看代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int N=5e5+10;
int tot,root,n;
struct node{
int l,r,size,dat,val;
}a[N];
int New(int s){
a[++tot].val=s;
a[tot].size=1;
a[tot].dat=rand();
return tot;
}
void update(int p){
a[p].size=a[a[p].l].size+a[a[p].r].size+1;
}
void split(int p,int k,int &x,int &y){
if(!p)return x=y=0,void();
else if(a[a[p].l].size+1<=k)split(a[p].r,k-a[a[p].l].size-1,a[x=p].r,y);
else split(a[p].l,k,x,a[y=p].l);
update(p);
}
int merge(int x,int y){
if(!x||!y)return x+y;
if(a[x].dat>a[y].dat)return a[x].r=merge(a[x].r,y),update(x),x;
else return a[y].l=merge(x,a[y].l),update(y),y;
}
void insert(int s,int k){
int x=0,y=0;
split(root,k-1,x,y);
root=merge(merge(x,New(s)),y);
}
void print(int p){
if(!p)return;
print(a[p].l);
printf("%d ",a[p].val);
print(a[p].r);
return;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int p;
scanf("%d",&p);
insert(i,p);
}
print(root);
return 0;
}
多的可以去看平衡树模板。
G - Fine Triplets
好好好,都会 FFT/NTT 是吧。
首先
我们不妨开一个桶
这个玩意不就是一个卷积吗,FFT/NTT 可以
?这不是卷积模板吗。
好吧,我不会卷积。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效