Codeforces Round 943 (Div. 3)
A. Maximize?
给你一个整数
注意,如果有不止一个
输入
第一行包含一个整数
下面每行
暴力模拟发现当
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n;
signed main(){
cin>>t;
while(t--){
cin>>n;
cout<<n-1<<'\n';
}
return 0;
}
B. Prefiquence
给你两个二进制字符串
您的任务是确定最大可能的数字
如果
输入
第一行包含一个整数
每个测试用例的第一行包含两个整数
每个测试用例的第二行包含长度为
每个测试用例的第三行包含长度为
保证所有测试用例的值
贪心求最大答案。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n,m,cnt;
char s[200003],t[200003];
signed main(){
cin>>T;
while(T--){
cin>>n>>m;
cin>>s>>t;
int pos=0;
for(int i=0;s[i];i++){
for(;t[pos];pos++){
if(t[pos]==s[i]){cnt++;pos++;break;}
}
if(!t[pos])break;
}
cout<<cnt<<'\n';cnt=0;
}
return 0;
}
C. Assembly via Remainders
给你一个数组
中的 。 代表所有 。
这里的
**注意,如果有一个以上的
看代码,用模运算展开式(
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n,x[503],a[503];
signed main(){
cin>>T;
while(T--){
cin>>n;
for(int i=2;i<=n;i++) cin>>x[i];
a[1]=x[2]+1;
for(int i=2;i<=n;i++){
a[i]=(max(x[i+1]-x[i],0ll)/a[i-1]+1)*a[i-1]+x[i];
}
for(int i=1;i<=n;i++) cout<<a[i]<<" \n"[i==n];
}
return 0;
}
/*
xi=ai mod ai-1
ai=pi*ai-1+xi
ai-1=pi-1*ai-2+xi-1
a2=p2*a1+x2
a3=p3*a2+x3
*/
D. Permutation Game
Bodya 和 Sasha 发现了一个排列
长度为
它们都在排列中选择了一个起始位置。
对局持续了
- 如果棋手当前的位置是
,那么他的得分就会增加 。 - 然后棋手要么停留在当前位置
,要么从 移动到 。
在整整
知道了博迪娅的起始位置
一眼题。显然 S,B 走的路径是一条链然后到某个点停下,暴力更新贡献即可。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n,a[200003],p[200003],k,pb,ps,anb,ans;
signed main(){
cin>>T;
while(T--){
cin>>n>>k>>pb>>ps;
for(int i=1;i<=n;i++) cin>>p[i];
for(int i=1;i<=n;i++) cin>>a[i];
int eb=pb,es=ps,totb=0,tots=0,lenb=0,lens=0;
do{
totb+=a[eb];lenb++;
anb=max(anb,totb+(k-lenb)*a[eb]);
eb=p[eb];
}while(eb!=pb&&lenb<=k);
do{
tots+=a[es];lens++;
ans=max(ans,tots+(k-lens)*a[es]);
es=p[es];
}while(es!=ps&&lens<=k);
if(anb>ans) cout<<"Bodya\n";
else if(anb<ans) cout<<"Sasha\n";
else cout<<"Draw\n";
anb=ans=0;
}
return 0;
}
E. Cells Arrangement
给你一个整数
假设
**如果存在多个解,你可以输出任意一个。
单元格
申金找规律题。
这是题解的规律。
然而我认为不是最优。
我的考场解法:以
- 显然左上右下肯定要放。
16 - 在第一列从第二个开始隔一个放一个,这样有一个好处,这样构造可以保证
的被构造,所以这里0 1 2 3 4 5 6 7。再考虑到右下角的贡献,即9 11 13 15,剩下的距离就用与右下角距离为 1 的点就行了,即8 10 12 14。 - 你惊奇地发现这样构造只要 7 个点就够了,这是我两次 WA 的原因(少输出点)
- 你惊奇地发现
会出问题,没关系,判掉即可。
是不是爆标了
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n;
signed main(){
cin>>T;
while(T--){
cin>>n;
cout<<"1 1\n";
if(n==4){
cout<<n<<' '<<n<<'\n';
cout<<"1 2\n";
cout<<n<<' '<<n-2<<'\n';
continue;
}
for(int i=2;i<=n;i+=2){
cout<<"1 "<<i<<'\n';
}
if(n>2) cout<<n<<' '<<n<<'\n';
if(n>3) cout<<n<<' '<<n-1<<'\n';
if(n>6) cout<<(n+1)/2<<' '<<(n+1)/2<<'\n';
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具