2024.12.28 Good Bye 2024: 2025 is NEAR

比赛链接

Solved: 5/10

Rank: 1565


-90 又 -90,好不容易上点分两场全掉没了……


A. Tender Carpenter

题意:\(n\) 个数,问能否有多于一种划分方案,使得划分出的每组数中任选三个数(可以相同)都能构成三角形。

显然全划分成一个是合法的;那么只需考虑任意的相邻两个数能否分成一组即可。

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define all(x) (x).begin(),(x).end()bool solve(){int n;cin>>n;vector<int> a(n);for(int& x:a)cin>>x;for(int i=0;i<n-1;++i){if(a[i]<a[i+1]*2&&a[i+1]<a[i]*2)return 1;}return 0;
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)cout<<(solve()?"YES":"NO")<<'\n';
}

B. Outstanding Impressionist

题意:\(n\) 个区间,对每个 \(i\),问是否存在一种方案,在所有区间中各取一个数,使得其他区间中取的数都于第 \(i\) 个区间取的数不同。

显然只有长度为 \(1\) 的区间会对答案产生影响,只需判断区间是否被长度为 \(1\) 的区间覆盖。对这类区间做一个前缀和。

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
#define all(x) (x).begin(),(x).end()bool solve(){int n;cin>>n;vector<int> l(n),r(n);vector<int> c(2*n+1);vector<int> sc(2*n+1);for(int i=0;i<n;++i){cin>>l[i]>>r[i];if(l[i]==r[i])++c[l[i]];}for(int i=1;i<=2*n;++i){sc[i]=c[i]>0;sc[i]+=sc[i-1];}for(int i=0;i<n;++i){if(l[i]==r[i]){if(c[l[i]]>1)cout<<0;else cout<<1;}else{int sum=sc[r[i]]-sc[l[i]-1];if(sum<r[i]-l[i]+1)cout<<1;else cout<<0;}}cout<<'\n';return 0;
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

C. Bewitching Stargazer

题意:初始有一个区间 \([1,n]\),递归对区间进行如下操作:若长度 \(<k\) 则忽略;若长度为偶数,则拆分为两个长度相等的子区间\([l,mid]\)\([mid+1,r]\);若长度为奇数,则拆分为\([l,mid-1]\)\([mid+1,r]\)并将\(mid\)的值加入答案。求最终答案。

右半区间的答案等于左半区间答案加左半区间数量乘一个常数,因此直接递归计算即可。

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
using pll=pair<ll,ll>;
#define all(x) (x).begin(),(x).end()pll dfs(ll n,ll k){if(n<k)return {0,0};ll m=n+1>>1;pll t;if(n&1){t=dfs(m-1,k);return {2*t.first+m+t.second*m,t.second*2+1};}t=dfs(m,k);return {2*t.first+t.second*m,t.second*2};
}void solve(){ll n,k;cin>>n>>k;cout<<dfs(n,k).first<<'\n';
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

D. Refined Product Optimality

题意:给两个序列 \(a\)\(b\),要求支持单点加 1 和查询两个序列从小到大排序后对应取 min 的乘积。

直接维护有序序列和每个数的排名即可。若有相等的数,则可视为相等数中排名最大的那个数加 1。

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
using pll=pair<ll,ll>;
#define all(x) (x).begin(),(x).end()const int N=2e5+5,mod=998244353;
ll qpow(ll x,int y){ll r=1;for(;y;y>>=1){if(y&1)r=r*x%mod;x=x*x%mod;}return r;
}
ll inv(ll x){return qpow(x,mod-2);}int n,q,o,x,pa[N],pb[N];
pii a[N],b[N];
map<int,int> mra,mrb;
ll ans;void solve(){cin>>n>>q;for(int i=1;i<=n;++i)cin>>a[i].first,a[i].second=i;for(int i=1;i<=n;++i)cin>>b[i].first,b[i].second=i;sort(a+1,a+n+1);sort(b+1,b+n+1);mra.clear(),mrb.clear();for(int i=1;i<=n;++i){pa[a[i].second]=i;pb[b[i].second]=i;mra[a[i].first]=i;mrb[b[i].first]=i;}ans=1;for(int i=1;i<=n;++i)ans=ans*min(a[i].first,b[i].first)%mod;cout<<ans<<' ';while(q--){cin>>o>>x;ll u,v;if(o==1){int r=pa[x];if(r<mra[a[r].first]){int t=mra[a[r].first];u=min(a[t].first,b[t].first);++a[t].first;v=min(a[t].first,b[t].first);swap(a[r].second,a[t].second);pa[a[r].second]=r;pa[a[t].second]=t;mra[a[r].first]=t-1;if(!mra.count(a[t].first))mra[a[t].first]=t;}else{u=min(a[r].first,b[r].first);if(a[r-1].first==a[r].first)mra[a[r].first]=r-1;else mra.erase(a[r].first);++a[r].first;v=min(a[r].first,b[r].first);if(!mra.count(a[r].first))mra[a[r].first]=r;}ans=ans*inv(u)%mod*v%mod;}else{int r=pb[x];if(r<mrb[b[r].first]){int t=mrb[b[r].first];u=min(a[t].first,b[t].first);++b[t].first;v=min(a[t].first,b[t].first);swap(b[r].second,b[t].second);pb[b[r].second]=r;pb[b[t].second]=t;mrb[b[r].first]=t-1;if(!mrb.count(b[t].first))mrb[b[t].first]=t;}else{u=min(a[r].first,b[r].first);if(b[r-1].first==b[r].first)mrb[b[r].first]=r-1;else mrb.erase(b[r].first);++b[r].first;v=min(a[r].first,b[r].first);if(!mrb.count(b[r].first))mrb[b[r].first]=r;}ans=ans*inv(u)%mod*v%mod;}cout<<ans<<' ';}cout<<'\n';
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

E. Resourceful Caterpillar Sequence

题意:给一棵树,两人轮流操作。初始有一条路径 \((p,q)\),先手操作时可将路径向 \(p\) 的方向移动一条边,后手操作时可将路径向 \(q\) 的方向移动一条边。\(p\) 为叶子先手胜,\(q\) 为叶子后手胜。问初始路径有多少种情况可保证后手获胜。

首先 \(q\) 是叶子后手直接就获胜了。若 \(q\) 不是叶子,则只可能是一轮直接获胜(否则先手可以反复撤销后手的移动,对局无法终止)。即:\(q'\) 是某叶子 \(l\) 的父亲,\(q\)\(q'\) 相邻,\(p\) 与任意叶子的距离至少为 \(2\)\(q\)\(p\)\(q'\) 的不同子树中。此时枚举 \(q'\) 统计答案即可。

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
using pll=pair<ll,ll>;
#define all(x) (x).begin(),(x).end()const int N=2e5+5,mod=998244353;
int n,x,y;
vector<int> e[N];
void adde(int x,int y){e[x].push_back(y);
}bool vis[N];
int sz[N],sum[N],fa[N];
void dfs(int u,int f){sz[u]=1,sum[u]=!vis[u];for(int v:e[u])if(v^f){fa[v]=u;dfs(v,u);sz[u]+=sz[v];sum[u]+=sum[v];}
}
vector<int> lf;
void solve(){cin>>n;for(int i=1;i<=n;++i)e[i].clear();for(int i=1;i<n;++i)cin>>x>>y,adde(x,y),adde(y,x);lf.clear();for(int i=1;i<=n;++i)if(e[i].size()==1)lf.push_back(i);ll ans=lf.size()*(n-lf.size());memset(vis,0,sizeof(bool)*(n+1));set<int> s;for(int u:lf){vis[u]=1;for(int v:e[u]){vis[v]=1;if(e[v].size()>1)s.insert(v);}}int all=0;for(int i=1;i<=n;++i)all+=!vis[i];dfs(1,0);for(int u:s){int siz,summ;for(int v:e[u]){if(v==fa[u])siz=n-sz[u],summ=sum[u];else siz=sz[v],summ=all-sum[v];if(siz>1)ans+=summ;}}cout<<ans<<'\n';
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

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

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

相关文章

【JAVA代码审计】华夏ERP_V2.3

免责声明 由于传播、利用本公众号菜狗安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号菜狗安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。一、项目介绍二、项目搭建三、漏洞挖掘3.1 多处sql…

基坑监测识别摄像机

基坑监测识别摄像机的应用能够有效监控基坑施工的过程,提高施工的安全性和效率。同时,它也能减少施工事故的发生,降低施工风险,保障工程的正常进行和人员的安全。总之,基坑监测识别摄像机是一种有益的施工监测工具,可以有效保障基坑施工的安全和稳定,提高施工质量和效率…

微服务架构设计模式PDF免费下载

世界十大软件架构师之一、微服务架构先驱者亲笔撰写,微服务实用落地指南。示例代码使用Java编程和Spring框架适读人群 :本书的重点是架构和开发,适合负责开发和交付软件的任何人(例如开发人员、架构师、 CTO等)阅读。示例代码使用Java语言和Spring框架 世界十大软件架构师…

在抖音发现有一个大一新生求期末作业,顺手做了一下(C语言 学生考勤)

这三个要求很简单 但是这个考核,要求课程结束后,自动完成考核要求有点模糊#include <stdio.h> #include <string.h> #define MAX_STUDENTS 10 #define MAX_CLASSES 4 #define MAX_NAME_LENGTH 50typedef struct {char name[MAX_NAME_LENGTH];char gender[10];int…

Python编程快速上手:让繁琐工作自动化(第2版)PDF免费下载

Python编程从入门到实践姊妹篇,零基础自学Python教程书籍,提供配套同步教学视频、在线编程环境!针对Python3.X版本更新适读人群 :本书适合任何想要通过Python学习编程的读者,尤其适合缺乏编程基础的初学者。通过阅读本书,读者将能利用非常强大的编程语言和工具,并且体会…

几页画作

时长由于自己过于菜而痛不欲生而产生画画灵感……时光花火,水月星辰

学业之船航海记录——软工篇

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315这个作业的目标 软工课程总结学号 102201118引言 上回说道,我的学业之船已在大学的海洋上行驶了一半的航程,这期间也遇到一些危…

这是篇博客

博客:软件工程实践课程回顾与总结 一、学期回顾 1.1 回顾你对于软件工程课程的想象 在学期开始之前,我对软件工程课程的期望在于提升编程能力。我想通过这门课程,能够深入了解软件开发流程中的实际操作,能够自主或协作实现开发出软件产品。 我原以为软件工程会是一个手把手…

苦尽甘来

一、学期回顾 1.1 回顾对于软件工程课程的想象 软件工程(实践者的研究方法)是一门研究如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,并运用计算机科学理论和技术以及工程管理原则和方法,按预算和进度要求开发和维护满足用户要求的软件产品的学科‌。‌在…

【杂谈】Kafka的日志段为什么不用内存映射?

什么是内存映射(Memory-Mapped File)? 内存映射(mmap)是一种将文件内容映射到内存中的技术,应用程序可以像操作内存一样对文件内容进行读写,而不需要显式地进行磁盘 I/O 操作。修改的内容会自动由操作系统同步到磁盘。 内存映射需要读取磁盘文件吗? 需要。毕竟,内存中…

【WEB安全】利用shuji还原webpack打包源码

一、前言二、webpack简介三、怎么确定是webpack打包站点呢四、shuji(周氏)配置4.1 安装nodejs环境4.2 安装shuji工具4.3 .js.map文件存放位置4.4 运行shuji 反编译.js.map文件获取源码4.5 代码审计五、实战记录免责声明 本公众号所分享内容仅用于网络安全技术讨论,切勿用于违…

万兴PDF专家绿色便携版

点击上方蓝字关注我 前言 万兴PDF一款非常实用的国产软件,它就像是一个超级工具箱,里面装满了处理PDF文件的各种工具。你可以用它来新建PDF、修改PDF里的内容、把PDF转成其他格式,还能给PDF签名、压缩大小、合并多个PDF,甚至比较两个PDF文件的不同。 这款软件的中文版设计得…