2024.11.30 Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2)

Solved: 5/10

Rank: 329


数数水平真的太差了。。。


A. King Keykhosrow's Mystery

题意:给 \(a,b\),求最小的 \(m\) 使得 \(m\bmod a = m\bmod b\)

输出最小公倍数即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;void solve(){ll n,m;cin>>n>>m;cout<<n*m/__gcd(n,m)<<'\n';
}
int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

B. Rakhsh's Revival

题意:给一个01串,每次操作可将长度为 \(k\) 的子串覆盖为 1,问最少几次操作可使串中不存在长度为 \(m\) 的全 0 子串。

遍历,遇到长度为 \(m\) 的子串就从第 \(m\) 个 0 开始覆盖。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;void solve(){int n,m,k;string s;cin>>n>>m>>k>>s;int len=0,res=0;for(int i=0;i<n;++i){if(s[i]=='0'){++len;if(len==m){for(int j=0;j<k&&i+j<n;++j)s[i+j]='1';++res,len=0;}}else len=0;}cout<<res<<'\n';
}
int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

C. Trapped in the Witch's Labyrinth

题意:一个上下左右四箭头的矩阵,某些位置待填,问最多有多少位置满足从这个位置开始沿箭头方向移动走不出矩阵。

BFS搜索一定能走出去的位置,没填的位置走不出去当且仅当它的四周全是能走出去的。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;const int N=1005;
int n,m;
string a[N];
const int dx[4]={1,0,-1,0};
const int dy[4]={0,1,0,-1};
const char de[4]={'U','L','D','R'};
bool vis[N][N];
void solve(){cin>>n>>m;for(int i=0;i<n;++i)cin>>a[i];if(n==1&&m==1){cout<<"0\n";return;}for(int i=0;i<n;++i)for(int j=0;j<m;++j)vis[i][j]=0;queue<pii> q;for(int i=0;i<n;++i){if(a[i][0]=='L')q.push(pii(i,0));if(a[i][m-1]=='R')q.push(pii(i,m-1));}for(int i=0;i<m;++i){if(a[0][i]=='U')q.push(pii(0,i));if(a[n-1][i]=='D')q.push(pii(n-1,i));}while(!q.empty()){int x=q.front().first,y=q.front().second;q.pop();vis[x][y]=1;for(int i=0;i<4;++i){int xx=x+dx[i],yy=y+dy[i];if(xx<0||xx>=n||yy<0||yy>=m||a[xx][yy]=='?')continue;if(a[xx][yy]==de[i])q.push(pii(xx,yy));}}int ans=0;for(int i=0;i<n;++i)for(int j=0;j<m;++j){if(a[i][j]!='?'){if(!vis[i][j])++ans;}else{bool fl=0;for(int t=0;t<4;++t){int ii=i+dx[t],jj=j+dy[t];if(ii>=0&&ii<n&&jj>=0&&jj<m&&!vis[ii][jj]){fl=1;break;}}if(fl)++ans;}}cout<<ans<<'\n';
}
int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

D. Darius' Wisdom

题意:\(n\) 堆石子,每堆石子数量不超过 2。每次只能交换两堆石子数差 1 的石子,给出一种操作数不超过 \(n\) 的方案使所有石子从小到大排序。

先把所有的 1 归位,然后用任意一个 1 把 0 和 2 归位。具体见代码。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;const int N=2e5+5;
int n,a[N],c[3];
vector<pii> ans;
vector<int> b[3][3];
int pos(int x){if(x>=1&&x<=c[0])return 0;else if(x>=c[0]+1&&x<=c[0]+c[1])return 1;else return 2;
}
void mov(int i1,int j1,int i2,int j2){int x=b[i1][j1].back(),y=b[i2][j2].back();ans.emplace_back(x,y);b[i1][j1].pop_back();b[i1-1][j1].push_back(x);b[i2][j2].pop_back();b[i2+1][j2].push_back(y);
}
void solve(){cin>>n;c[0]=c[1]=c[2]=0;for(int i=1;i<=n;++i)cin>>a[i],++c[a[i]];for(int i=0;i<3;++i)for(int j=0;j<3;++j)b[i][j].clear();for(int i=1;i<=n;++i)b[a[i]][pos(i)].push_back(i);ans.clear();while(b[0][1].size()||b[0][2].size()||b[1][0].size()||b[1][2].size()||b[2][0].size()||b[2][1].size()){int st=ans.size();while(b[2][0].size()&&b[1][2].size())mov(2,0,1,2);while(b[2][1].size()&&b[1][2].size())mov(2,1,1,2);while(b[1][0].size()&&b[0][2].size())mov(1,0,0,2);while(b[1][0].size()&&b[0][1].size())mov(1,0,0,1);if(ans.size()==st)break;}if(b[2][0].size()){int t=b[1][1].back(),m=b[2][0].size();ans.emplace_back(b[2][0][0],t);ans.emplace_back(b[2][0][0],b[0][2][0]);for(int i=1;i<m;++i){ans.emplace_back(b[2][0][i],b[0][2][i-1]);ans.emplace_back(b[2][0][i],b[0][2][i]);}ans.emplace_back(t,b[0][2][m-1]);}cout<<ans.size()<<'\n';for(auto&[x,y]:ans)cout<<x<<' '<<y<<'\n';
}
int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

E. Permutations Harmony

题意:给 \(n,k\),构造 \(k\) 个不同的排列 \(p_1,\dots,p_k\),使得对所有的 \(j\)\(\sum_{i=1}^k p_{i,j}\) 相等。

\(n\) 为偶数,\(k\) 为奇数时,因为 \(n\nmid k\frac {n(n+1)}2\),所以无解;

\(k=1,k=n!-1,k>n!\) 时,无解;

其他情况均有解,分 \(k\) 为奇数和偶数讨论。

  • \(k\) 为偶数时:12345 54321 12354 54312……从小到大枚举排列配上 \(n+1\) 减每一项的排列即可。

  • \(k\) 为奇数时:我们先构造出一组 \(k=3\) 的。第一个排列从小到大,第二个排列奇数项从 \(\frac{n+1}2\) 开始递减、偶数项从 \(n\) 开始递减。以 \(n=7\) 为例:1234567 4736251 7362514。剩下的和 \(k\) 为偶数一样,碰到重复的跳过即可。这样恰好可以把 \(k\)\(3\)\(n!-3\) 的所有情况都构造出来。

注意特判 \(n=k=1\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;const int N=2e5+5;
const int fac[9]={1,1,2,6,24,120,720,5040,40320};
int n,k,p[N],q[N],r[N];
void solve(){cin>>n>>k;if(k==1){if(n==1)cout<<"YES\n1\n";else cout<<"NO\n";}else if(n<=8&&k>fac[n])cout<<"NO\n";else if(!(n&1)&&(k&1))cout<<"NO\n";else if(n<=8&&k==fac[n]-1)cout<<"NO\n";else{cout<<"YES\n";for(int i=1;i<=n;++i)p[i]=i;if(!(k&1)){for(int i=1;i<=k;i+=2){for(int i=1;i<=n;++i)cout<<p[i]<<' ';cout<<'\n';for(int i=1;i<=n;++i)cout<<n-p[i]+1<<' ';cout<<'\n';next_permutation(p+1,p+n+1);}}else{for(int i=1;i<=n/2;++i)q[i*2-1]=n/2+2-i,q[i*2]=n+1-i;q[n]=1;for(int i=1;i<=n/2;++i)r[i*2]=n/2+1-i,r[i*2+1]=n-i;r[1]=n;for(int i=1;i<=n;++i)cout<<p[i]<<' ';cout<<'\n';for(int i=1;i<=n;++i)cout<<q[i]<<' ';cout<<'\n';for(int i=1;i<=n;++i)cout<<r[i]<<' ';cout<<'\n';for(int i=4;i<=k;i+=2){bool fl1=1,fl2=1,fl3=1,fl4=1,fl5=1,fl6=1;for(int i=1;i<=n;++i){if(p[i]!=i)fl1=0;if(p[i]!=q[i])fl2=0;if(p[i]!=r[1])fl3=0;if(n-p[i]+1!=i)fl4=0;if(n-p[i]+1!=q[i])fl5=0;if(n-p[i]+1!=r[i])fl6=0;}if(!fl1&&!fl2&&!fl3&&!fl4&&!fl5&&!fl6){for(int i=1;i<=n;++i)cout<<p[i]<<' ';cout<<'\n';for(int i=1;i<=n;++i)cout<<n-p[i]+1<<' ';cout<<'\n';}else i-=2;next_permutation(p+1,p+n+1);}}}
}
int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

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

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

相关文章

写一句话:NOIP之后,没有完结的故事与青春

睡觉睡觉,一切都好。睡觉最好。可能是两句话? 周五和助教一起吃饭,她说:不要老是说自己退役了。以后还有各种比赛,上了大学还有 acm。路还很长。 这两天和宁老师一起行动,宁老师真的是很可爱的很好的老师(如果 N 老师您看到了,那我想说的是老师特别幽默有趣,谢谢老师^…

写一句话:没有完结的故事与青春

睡觉睡觉,一切都好。睡觉最好。可能是两句话? 周五和助教一起吃饭,她说:不要老是说自己退役了。以后还有各种比赛,上了大学还有 acm。路还很长。 这两天和宁老师一起行动,宁老师真的是很可爱的很好的老师(如果 N 老师您看到了,那我想说的是老师特别幽默,谢谢老师^^)。…

攻防世界-不仅仅是RSA

一、题目 给出以下几个文件py文件代码如下二、解题思路 1、听C1,C2的音频, 由长短声很快确定是摩斯密码,上网一搜,果然有在线摩斯密码音频解密网站,上去解密即可这里初步判断可能是密文 2、进一步分析代码分析代码发现这就是一个简单的RSA加密算法,并且有两个不同公钥的RSA…

Web自动化001-Web自动化前端基础及Selenium原理和环境搭建

Web自动化001-Web自动化前端基础及Selenium原理和环境搭建 Web自动化前端基础及Selenium原理和环境搭建1.什么是web自动化测试?web自动化测试是指利用自动化的测试工具或者框架,通过编写脚本和模拟用户在web页面上的任意操作web自动化测试是一种比较高效,准确、可重复测试的…

道路缺陷智能检测系统

道路缺陷智能检测系统的核心是基于YOLOX算法结合OpenCV, 道路缺陷智能检测系统能够通过无人机或车载相机捕获的道路图像,准确识别出路面的各类病害。无论是细微的龟裂还是明显的坑洞,系统都能迅速发现并标记出来。通过深度学习技术,系统能够学习并识别病害的特征,随着数据…

皮带输送机空载识别检测系统

皮带输送机空载识别检测系统核心在于通过现场监控摄像机,皮带输送机空载识别检测系统实时监测皮带输送机上是否有物料。系统的工作原理是首先利用YOLOvX算法对摄像机捕获的图像进行处理,识别出图像中的物料。然后,通过设定的阈值来判断物料是否存在。当监控画面中没有物料存…

泥石流识别摄像机

泥石流识别摄像机通过高清摄像头捕捉山体图像,泥石流识别摄像机利用YOLOX算法对能够对山体的微小变化进行精确捕捉,并通过深度学习不断优化其识别能力,识别出山体的异常变化,如泥石流滑坡、落石等迹象。一旦检测到这些异常,系统会立即启动报警机制,将预警信息发送给相关部…

课堂教学行为质量评估检测系统

课堂教学行为质量评估检测系统通过在教室内部署摄像头,课堂教学行为质量评估检测系统实时捕捉课堂视频,利用深度学习算法对视频流进行智能分析,能够准确识别出学生的各种课堂行为,如起立、读写、举手、听讲、趴桌子、玩手机等。这些行为数据被量化,为后续的教学质量评估提…

gitlab的数据备份和恢复

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.手动备份配置文件二.手动备份数据三.模拟删除meta-data项目数据1 删除meta-data项目2 meta-data被删除成功四.通过备份恢复meta-data项目数据1 恢复前需要先停止puma和sidekiq服务2 恢复时指定备份文件…

Linux中实现根据scaffold名称从fasta文件中提取数据(scaffold名称长)

001、(base) [sy20213040737@admin2 test]$ ls chr.list test.fa (base) [sy20213040737@admin2 test]$ cat test.fa ## 测试fasta文件 >chr1 xxxx aaaabbb cccccddd >chrx eee jj aaaaaabbbbbc cccccdddd >chr3 iii rr aaaaaaaaa aaaaaaaaa bbbbbbbb >c…

SpringMVC-06-SSM整合

1、环境要求IDEA MySQL 8.x Tomcat 9 Maven 3.6这只是大型软件要求,项目相关的jar包依赖将在Maven中配置。 项目前置技能:MySQL、Mybatis、Spring、JavaWeb、简单的前端知识。 2、数据库表 创建一个存放书籍数据的数据库表 CREATE DATABASE `ssmbuild`;USE `ssmbuild`;DROP T…

高通sku lisence升级

最近在搞高通的license升级,也就是提速cpu/gpu性能,记录一下一、背景 高通为了满足不同阶段开发需求,对soc性能做了一些特定定义,因此我们需要根据产品的开发阶段或者需求变化,使用对应的性能指标。不同license下的cpu gpu性能表现目前我们ES6代码默认使用的是CCCC对应的S…