题目链接:牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

F Flower

思路

可知当n<=a时无论怎么操作她都会离开

n%(a+b)是指进行完若干轮之后剩下的不足a+b个,如果是>a的话那么最后一轮必然不在a中,否则就摘掉n%(a+b)朵这样就使得其位于b中

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int n,a,b;cin>>n>>a>>b;if(n<=a){cout<<"Sayonara\n";return;}int x=n%(a+b);if(x>a||x==0){cout<<"0\n";return;}cout<<x<<"\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

D Distant Control

思路

只要有连续a个开机的我们将其设置成a个关机的之后再将这a个连同与其挨着的关机的一个,即将a+1设置成开机的,如此循环就能够将所有的都设置成开机的

所以结论即为若是有连续不低于a个开机的或者有连续不低于a+1个关机的,就一定能使得所有的都开机

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int n,a;cin>>n>>a;string s;cin>>s;s=" "+s;int cnt1=0;int cnt0=0;int mx1=0,mx0=0;int ct=0;for(int i=1;i<=n;i++){if(s[i]=='1'){ ct++;cnt1++;cnt0=0;}else{cnt1=0;cnt0++;}mx1=max(mx1,cnt1);mx0=max(mx0,cnt0);}if(mx1>=a||mx0>=a+1){cout<<n<<"\n";}else{cout<<ct<<"\n";}
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

J Jetton

思路

可以证明若游戏会结束那么轮数不会超过log2(x+y),直接模拟即可

此外,容易证明游戏能在有 限回合内结束,答案为x+y / gcd(x,y) 是 2 的正整数次幂

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int x,y;cin>>x>>y;int g=__gcd(x,y);int t=(x+y)/g;for(int i=0;i<=32;i++){if(t==(1ll<<i)){cout<<i<<"\n";return;}}cout<<"-1\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

A Ad-hoc Newbie

思路

赛时没注意到保证对每个i都有1 ≤ fi ≤ i 这句加重的话导致根本没有思路,最后还是靠队友解出来的

我们行和列其实是对称的所以我们只需要填好一半即可,在构造时我们对于第i列来说我们将后i行添入比i大的数即可

一个可行的构造方法是对于第i行来说 2 3 ... i 0 1这样保证了此行的mex值为n

当f[i]=x(x<n)时我们只需要将x换成n即可

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int n;cin>>n;vi f(n+1);for(int i=1;i<=n;i++){cin>>f[i];}vector<vector<int>> ans(n+1,vi(n+1));for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){if(j==i) ans[i][j]=1;else if(j==i-1) ans[i][j]=0;else ans[i][j]=j+1;}}if(f[1]==1) ans[1][1]=0;for(int i=2;i<=n;i++){if(f[i]==i) continue;if(f[i]==1) ans[i][i]=i;else if(f[i]==0) ans[i][i-1]=i;else ans[i][f[i]-1]=i;}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){ans[i][j]=ans[j][i];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<ans[i][j]<<" ";}cout<<"\n";}
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

E Equal

思路

发现当n为奇数时我们总能将所有的a进行乘法来使得所有的a相等,所以n为奇数时输出yes

偶数时(特判n=2)我们要对其进行质因数分解,如果出现的次数都是偶数次则输出yes,否则输出no

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=5e6+10;
const int mod=1e9+7;vector<int> minp,primes;
void sieve(int n){minp.assign(n+1,0);primes.clear();for(int i=2;i<=n;i++){if(minp[i]==0){minp[i]=i;primes.push_back(i);}for(auto p:primes){if(i*p>n){break;}minp[i*p]=p;if(p==minp[i]){break;}}}
}
bool isprime(int n){return minp[n]==n;
}int lcm(int x,int y){return x*y/__gcd(x,y);
}void solve(){int n;cin>>n;vi a(n+1);for(int i=1;i<=n;i++){cin>>a[i];}if(n==2){if(a[1]==a[2]){cout<<"Yes\n";}else{cout<<"No\n";}return;}if(n%2){cout<<"Yes\n";return;}unordered_map<int,int> cnt;auto cal=[&](int tmp){for(int i=0;i<primes.size();i++){while((tmp!=1)&&(tmp%primes[i]==0)){tmp/=primes[i];cnt[primes[i]]++;}if(isprime(tmp)){cnt[tmp]++;break;}if(tmp==1) break;}};for(int i=1;i<=n;i++){cal(a[i]);}for(auto [i,t]:cnt){if(t%2){cout<<"No\n";return;}}cout<<"Yes\n";}
signed main() {vcoistntcout<<fixed<<setprecision(2);sieve(N);int _=1;cin>>_;while(_--) solve();return 0;
}

H Head out to the Target

思路

转化题意,维护一个可达集合,每个时刻对于目标节点u,选择集合中距离u最近的节点,往u移动r-l+1步若能到达则输出此时的时刻,无法到达将r-l+1步走过的点加入到集合里面

找到最近的集合里的点可以用倍增找,加入到集合里面的过程可以暴力

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=1e6+10;
const int inf=1e18;
const int mod=998244353;int st[N][35],f[N];
vector<vi> e(N);
int n,k;
bool vis[N]={false};struct node{int u,l,r;
}q[N];
bool cmp(node x,node y){return x.l<y.r;
}void init(){vis[1]=true;vis[0]=true;for(int p=1;(1<<p)<=n;p++){for(int i=1;i<=n;i++){st[i][p]=st[st[i][p-1]][p-1];}}
}pll jamp(int x){int cnt=0;for(int p=30;p>=0;p--){if(!vis[st[x][p]]){x=st[x][p];cnt+=(1<<p);}}return {st[x][0],cnt+1};
}void solve(){cin>>n>>k;for(int i=2;i<=n;i++){cin>>f[i];st[i][0]=f[i];e[f[i]].push_back(i);}init();for(int i=1;i<=k;i++){cin>>q[i].u>>q[i].l>>q[i].r;}sort(q+1,q+1+k,cmp);for(int i=1;i<=k;i++){auto [x,cnt]=jamp(q[i].u);int now=q[i].r-q[i].l+1;if(now>=cnt){cout<<q[i].l+cnt-1<<"\n";return;}int y=q[i].u;int res=cnt-now;while(y!=x){if(res>0) res--;y=f[y];if(res==0) vis[y]=true;}}cout<<"-1\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;// cin>>_;while(_--) solve();return 0;
}

B Bitwise Puzzle

思路

明显a,b为0时特判

操作次数不超过64,意味着每次对二进制某一位进行修改平均次数为2,也就是说可以将a或者b某一个改成c,另一个改成0,最后a与b异或一次得到全部相等

注意到我们可以拿b的最高位1来对a进行修改,所以我们在开始时将a与b进行异或,使其最高位1的位置相同,假设用hx表示x的最高位1的位置,此时ha=hb

1.ha>=hc

我们可以用b来不断修改a,b不断右移直到a改成c,b变成0,我们进行b=b xor a操作,将b变成a

2.ha<hc

我们依然用b来不断修改a,此时我们要把a变成c的前缀部分,b变成1,之后将a不断左移,用1来修改a的最后一位将其变成c,最后将b变成0后与a异或,变成a

可以发现其操作次数是不会超过64的

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
// #define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;int h(int x){if(x==0) return 0;return 32-__builtin_clz(x);
}
int g(int x,int k){return (x>>(k-1))&1;
}void solve(){int a,b,c;cin>>a>>b>>c;if(a==0&&b==0){if(c>0) cout<<"-1\n";else cout<<"0\n";return;}vi ans;if(h(a)>h(b)){ans.push_back(4);b^=a;}if(h(a)<h(b)){ans.push_back(3);a^=b;}while(h(b)>h(c)){if(g(a,h(b))){ans.push_back(3);a^=b;}ans.push_back(2);b/=2;}if(h(a)<h(b)) ans.push_back(3),a^=b;for(int i=h(a),j=h(c);i>=1;i--,j--){if(g(a,i)!=g(c,j)){ans.push_back(3);a^=b;}ans.push_back(2);b/=2;}ans.pop_back();b=1;for(int i=(h(c)-h(a));i>=1;i--){ans.push_back(1);a*=2;if(g(c,i)){ans.push_back(3);a^=b;}}ans.push_back(2);b/=2;ans.push_back(4);b^=a;// cout<<a<<" "<<b<<" "<<c<<"\n";cout<<ans.size()<<"\n";for(int x:ans){cout<<x<<" ";}cout<<"\n";}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

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

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

相关文章

【KO】 Android基础

以下是对这些 Android 相关问题的解答: 1. Activity 与 Fragment 之间常见的几种通信方式 接口回调:Fragment 定义接口,Activity 实现该接口,Fragment 通过接口实例调用方法传递数据 。 使用 Bundle:Fragment 可通过 setArguments(Bundle) 传数据给自身,Activity 可在创…

Gradle构建工具教程:由来与发展史(版本演进与未来优势)

一、Gradle简介Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具&#xff0c;使用基于Groovy的领域特定语言&#xff08;DSL&#xff09;声明项目设置。相较于传统XML配置&#xff0c;这种DSL使构建脚本更简洁易读。Gradle支持Java、Groovy、Kotlin、Sca…

@Rancher简介部署使用 - Docker Compose

Rancher 安装和使用介绍 - Docker Compose 文章目录Rancher 安装和使用介绍 - Docker Compose1. Rancher 简介1.1 什么是 Rancher1.2 Rancher 核心功能1.3 Rancher 架构2. 安装前准备2.1 系统要求2.2 环境准备3. 使用 Docker Compose 安装 Rancher3.1 创建 Docker Compose 文件…

程序员接私活的一些平台和建议,千万要注意,别掉坑里!

关于程序员接私活&#xff0c;社会各界说法不一&#xff0c;如果你确实急用钱&#xff0c;价格又合适&#xff0c;那就去做。 不过&#xff0c;私活也没有那么好做&#xff0c;一般私活的性价比远比上班拿工资的低。但是作为一个额外的收益渠道&#xff0c;一部分生活窘迫的程序…

多轮问答与指代消解

目录引言一、LangChain是怎么实现的多轮问答1、记忆模块&#xff08;Memory&#xff09;管理对话历史‌2、对话链&#xff08;Conversational Chain&#xff09;架构‌3、智能体&#xff08;Agent&#xff09;决策机制‌4、上下文感知的Prompt工程‌5、RAG&#xff08;检索增强…

文件IO、文件IO与标准IO的区别

一、文件IO --->fd&#xff08;文件描述符&#xff09;打开文件open读、写文件read/write关闭文件close#include <sys/types.h>#include <sys/stat.h>#include<fcntl.h>文件描述符&#xff1a;操作系统中已打开文件的标识符。小的、非负的整形数据范围&am…

【模型剪枝2】不同剪枝方法实现对 yolov5n 剪枝测试及对比

目录 一、背景 二、剪枝 1. Network Slimming 1.0 代码准备 1.1 稀疏化训练 1.2 剪枝 1.3 微调 1.4 测试总结 2. Torch Pruning&#xff08;TP&#xff09; 2.1 MagnitudePruner 2.1.1 剪枝 2.1.2 retrain 2.1.3 测试总结 2.2 SlimmingPruner 2.2.1 定义重要性评…

AI入门学习--AI模型评测

一、AI模型评测目标传统质量主要关注功能、性能、安全、兼容性等。 AI模型评测在此基础上,引入了全新的、更复杂的评估维度: 1.性能/准确性:这是基础,在一系列复杂的评测基准上评价个性能指标。 2.安全性:模型是否可能被用于恶意目的?是否会生成有害、违法或有毒的内容?是否容…

nt!MmCreatePeb函数分析之peb中OSMajorVersion的由来

第一部分&#xff1a;NTSTATUS MmCreatePeb (IN PEPROCESS TargetProcess,IN PINITIAL_PEB InitialPeb,OUT PPEB *Base) {PPEB PebBase;PebBase->OSMajorVersion NtMajorVersion;PebBase->OSMinorVersion NtMinorVersion;PebBase->OSBuildNumber (USHORT)(NtBuildN…

Unity TimeLine使用教程

1.概述 Timeline 是一个基于时间轴的序列化编辑工具&#xff0c;主要用于控制游戏或动画中的 过场动画&#xff08;Cutscenes&#xff09;、剧情事件、角色动画混合、音频控制 等。它类似于视频编辑软件&#xff08;如 Adobe Premiere&#xff09;的时间线&#xff0c;但专门针…

数据分析基本内容(第二十节课内容总结)

1.pd.read_csv(一个文件.csv)&#xff1a;从本地文件加载数据&#xff0c;返回一个 DataFrame 对象&#xff0c;这是 pandas 中用于存储表格数据的主要数据结构2.df.head()&#xff1a;查看数据的前五行&#xff0c;帮助快速了解数据的基本结构和内容3.df.info()&#xff1a;查…

2025年最新原创多目标算法:多目标酶作用优化算法(MOEAO)求解MaF1-MaF15及工程应用---盘式制动器设计,提供完整MATLAB代码

一、酶作用优化算法 酶作用优化&#xff08;Enzyme Action Optimizer, EAO&#xff09;算法是一种2025年提出的新型仿生优化算法&#xff0c;灵感源于生物系统中酶的催化机制&#xff0c;发表于JCR 2区期刊《The Journal of Supercomputing》。其核心思想是模拟酶与底物的特异性…

用 COLMAP GUI 在 Windows 下一步步完成 相机位姿估计(SfM) 和 稀疏点云重建的详细步骤:

使用 COLMAP GUI 进行 SfM 和稀疏点云重建的步骤1. 打开 COLMAP GUI运行 colmap.bat&#xff0c;会弹出图形界面。2. 新建项目&#xff08;或打开已有项目&#xff09;点击菜单栏的 File > New Project&#xff0c;选择一个空文件夹作为项目目录&#xff08;建议新建一个空目…

天线设计 介质材料PEC和FR4有什么区别吗

在电磁仿真&#xff08;包括 CST 中&#xff09;&#xff0c;PEC 和 FR4 是两种完全不同的材料类型&#xff0c;主要区别如下&#xff1a;材料性质&#xff1a;PEC&#xff08;Perfect Electric Conductor&#xff0c;理想电导体&#xff09;&#xff1a;是一种理论上的理想材料…

mysql锁+索引

mysql锁按锁的粒度分类表级锁&#xff08;Table - level locks&#xff09;特点&#xff1a;对整张表进行锁定&#xff0c;实现简单&#xff0c;加锁和释放锁的速度快&#xff0c;但并发度较低。当一个事务对表加表级锁后&#xff0c;其他事务对该表的读写操作都可能被阻塞。应…

计算机视觉CS231n学习(7)

可视化和理解 这里主要是对CNN中间的层的结果可视化滤波器可视化 直接可视化网络各层的滤波器权重&#xff0c;高层滤波器的可视化结果趣味性较低&#xff0c;而底层滤波器通常对应边缘、纹理等基础视觉特征 &#xff08;“高层滤波器” 通常指的是网络中靠后的卷积层所包含的滤…

OpenBMC中工厂模式的简明工作流程解析

本文将以最简单直接的方式&#xff0c;从零开始讲解OpenBMC中工厂模式的完整工作流程&#xff0c;包括从设计到使用的全生命周期。 1. 工厂模式最简示例 我们先从一个最基础的工厂模式实现开始&#xff1a; // 产品接口 class GpioPin { public:virtual void setValue(bool val…

解决:Error updating changes: detected dubious ownership in repository at

在通过 Git Bash 提交项目代码时输入 git add . 命令后&#xff0c;报错&#xff1a;Error updating changes: detected dubious ownership in repository at ...这是因为 该项目的所有者 与 现在的用户 不一致 比如说&#xff1a; 该项目的所有者是 Administrator&#xff0c;…

DataEase V2 社区版安装部署

参考&#xff1a;使用外置 MySQL 部署 DataEase v2 - FIT2CLOUD 知识库 一、下载安装包 开源社区 - FIT2CLOUD 飞致云 选择社区版下载 下载后上传到 linux 的目录 &#xff08;要求至少200G&#xff09; 二、在MySQL8中创建数据库 # 创建DataEase库 CREATE DATABASE datae…

nginx高性能web服务器

web服务基础介绍 一、Web服务核心流程 #mermaid-svg-NCj4hbRIvvgMXmcK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NCj4hbRIvvgMXmcK .error-icon{fill:#552222;}#mermaid-svg-NCj4hbRIvvgMXmcK .error-text{fil…