Codeforces Global Round 26 补题记录(A~C2)
1.CodeForces Round #939(Div. 2) 补题记录(A~F)2.CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes!) 补题记录(A~A)3.Educational Codeforces Round 163 (Rated for Div. 2) 补题记录(A~D)4.CodeForces Round #951(Div. 2) 补题记录(A~E)
5.Codeforces Global Round 26 补题记录(A~C2)
6.CodeForces Round #959 sponsored by NEAR (Div. 1 + Div. 2) 补题记录(A~E)7.Codeforces Round 960 (Div. 2) 补题记录(A~D)8.Codeforces Round 961 (Div. 2) 补题记录(A~D)9.Codeforces Round 962 (Div. 3) 补题记录(A~G)10.Pinely Round 4 (Div. 1 + Div. 2) 补题记录(A~F)11.Educational Codeforces Round 168 (Rated for Div. 2) 补题记录(A~E)12.Codeforces Round 963 (Div. 2) 补题记录(A~D,F1)13.Codeforces Round 964 (Div. 4) 补题记录(A~G2)14.Codeforces Round 965 (Div. 2) 补题记录(A,B,D,E1)15.EPIC Institute of Technology Round August 2024 (Div. 1 + Div. 2) 补题记录(A~D1,E)16.Educational Codeforces Round 169 (Rated for Div. 2) 补题记录(A~F)17.Codeforces Round 972 (Div. 2) 补题记录(A~C,E1)18.Codeforces Round 988 (Div. 3) 补题记录(A~G)19.Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2) 补题记录(A~E)下大分场/ll
A
若
- 存在一个数出现了至少两次。那么让其中的恰好一次染上红色,其他的数全部染上蓝色。
- 不存在一个数出现了至少两次。那么随机选取一个数染上红色,其他的数全部染上蓝色。
时间复杂度为
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1000100;
int a[N];
signed main() {
int T;
cin>>T;
while(T--){
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
if(a[1]==a[n])cout<<"NO\n";
else{
cout<<"YES\n";
map<int,int>mp;
for(int i=1;i<=n;i++)mp[a[i]]++;
for(int i=1;i<=n;i++)if(mp[a[i]]>=2){
for(int j=1;j<=n;j++)if(j==i)cout<<"R";else cout<<"B";
cout<<'\n';
goto ee;
}
cout<<"R";
for(int i=2;i<=n;i++)cout<<"B";
cout<<'\n';
ee:;
}
}
}
B
考虑从低位到高位模拟过程。如果在枚举到某一位的值的时候,值为
时间复杂度为
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1000100;
char s[N];
int a[N];
signed main() {
int T;
cin>>T;
while(T--){
scanf("%s",s+1);
bool ok=true;
int n=strlen(s+1);
for(int i=1;i<=n;i++)a[i]=s[i]^48;
a[0]=a[n+1]=a[n+2]=a[n+3]=a[n+4]=a[n+5]=0;
for(int i=n;i>1;i--){
if(a[i]==9){ok=false;break;}
a[i-1]--;
for(int j=i-1;j;j--){
if(a[j]>=0)break;
a[j-1]--,a[j]+=10;
}
if(a[0]<0){ok=false;break;}
}
cout<<((ok&&!a[1])?"YES":"NO")<<'\n';
}
}
C1
发现要么一直不用
时间复杂度为
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1000100;
int a[N],pre[N];
signed main() {
int T;
cin>>T;
while(T--){
int n,id=-1;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],pre[i]=pre[i-1]+a[i];
int mi=0;
for(int i=n;i;i--)if(pre[i]<mi){
mi=pre[i];
id=i;
// break;
}
if(id==-1)cout<<pre[n]<<'\n';
else{
int s=0;
for(int i=1;i<=n;i++){
if(i<=id)s-=a[i];
else s+=a[i];
}
cout<<s<<'\n';
}
}
}
C2
不会猜结论。每一步结束之后,若当前的前缀和取到了全部前缀和的最小值,则这一步对答案造成了
- 不存在任何一个前缀和使得这个前缀和
。此时对于任意一个位置 操作和 操作没有任何本质区别。任意一步都可以在 操作和 操作中任选一个操作执行。 - 存在一个前缀和使得这个前缀和
。因为执行完这一步之后后面不论怎么走答案都不会偏离最大值(参见 C1 的结论),所以说后面的任意一步都可以在 操作和 操作中任选,即 种不同选择;若前面有前缀和 的那么 操作和 操作没有本质的区别,若有 个满足这样条件的则有 种不同选择。根据乘法原理可知对答案的贡献为 。其中 可以在枚举的时候扫一遍得出答案。
时间复杂度为
Brute Code
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1000100;
int a[N],pre[N];
signed main() {
int T;
cin>>T;
while(T--){
int n,id=-1;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],pre[i]=pre[i-1]+a[i];
int mi=0;
for(int i=n;i;i--)if(pre[i]<mi){
mi=pre[i];
id=i;
// break;
}
if(id==-1){
cout<<pre[n]<<'\n';
int s=pre[n];
int cnt=0;
for(int i=0;i<(1ll<<n);i++){
int now=0;
for(int j=1;j<=n;j++)if(i>>(j-1)&1)now+=a[j];
else now=abs(now+a[j]);
if (now==s)cnt++;
}
cout<<cnt<<'\n';
}
else{
int s=0;
for(int i=1;i<=n;i++){
if(i<=id)s-=a[i];
else s+=a[i];
}
cout<<s<<'\n';
int cnt=0;
for(int i=0;i<(1ll<<n);i++){
int now=0;
for(int j=1;j<=n;j++)if(i>>(j-1)&1)now+=a[j];
else now=abs(now+a[j]);
if (now==s)cnt++;
}
cout<<cnt<<'\n';
}
}
}
Correct Code
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1000100,mod=998244353;
int a[N],pre[N],bin[N];
signed main() {
int T;
cin>>T;
bin[0]=1;
for(int i=1;i<N;i++)bin[i]=bin[i-1]*2%mod;
while(T--){
int n,id=-1;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],pre[i]=pre[i-1]+a[i];
int mi=0,r=0;
for(int i=1;i<=n;i++)mi=min(mi,pre[i]);
if(mi==0)cout<<bin[n]<<'\n';
else{
int ans=0;
for(int i=1;i<=n;i++){
if(pre[i]>=0)r++;
if(pre[i]==mi)ans=(ans+bin[n-i+r])%mod;
}
cout<<ans<<'\n';
}
}
}
本文来自博客园,作者:yhbqwq,转载请注明原文链接:https://www.cnblogs.com/yhbqwq/p/18240364,谢谢QwQ
合集:
CodeForces 比赛合集
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)