本文主要是介绍2024.3.13abc晚训题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
晚训视频讲解B站链接点击进去
晚训题目地址https://vjudge.net/contest/615340
A题参考程序
#include<bits/stdc++.h>
using namespace std;
char s[105];
int main(){scanf("%s",s+1);int n=strlen(s+1);int ok=0;for(int i=1;i<=n;i++){if(s[i]=='|'){ok++;continue;}if(ok==0||ok==2)printf("%c",s[i]);}return 0;
}
B题参考程序
#include<bits/stdc++.h>
using namespace std;
int A[200];
int main(){int len=0;int x;while(scanf("%d",&x)!=EOF){A[++len]=x;}for(int i=len;i>=1;i--){printf("%d\n",A[i]);}return 0;
}
C题思路
考虑到把A,B,C数组枚举一遍找到所有的和并标记起来,然后Q次询问的时候能直接查询。但是这里“和”最大达到3*10 8 ,用map来做非常方便
map如何使用,可以见B站讲解视频
#include<bits/stdc++.h>
using namespace std;
map<int,int>vis;
int A[110];
int B[110];
int C[110];
int main(){int n,m,l;cin>>n;for(int i=1;i<=n;i++){cin>>A[i];}cin>>m;for(int i=1;i<=m;i++){cin>>B[i];}cin>>l;for(int i=1;i<=l;i++){cin>>C[i];}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int k=1;k<=l;k++){vis[A[i]+B[j]+C[k]]=1;}}}int q;cin>>q;while(q--){int x;cin>>x;if(vis[x]==1)cout<<"Yes";else cout<<"No";cout<<'\n';}return 0;
}
D题参考程序
#include<bits/stdc++.h>
using namespace std;int main(){int a,b;cin>>a>>b;int c=a+b;if(c==9){cout<<c-1;} else{cout<<c+1;}return 0;
}
E题参考程序
#include<bits/stdc++.h>
using namespace std;
int A[102][102];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>A[i][j];if(A[i][j]!=0){cout<<j<<" ";}}cout<<'\n';}return 0;
}
F题解题思路
N是非常大的,K是回文立方数,我们可以考虑枚举x,不难发现在最大值为1018 的情况下,x最大为106 所以说只需要枚举最多1~106 次
每次操作的时候计算出x3 检查是否是回文数字即可
#include<bits/stdc++.h>
using namespace std;
int A[30];
int main(){long long int n;cin>>n;int len;long long int ans=0;for(int i=1;i<=1000000;i++){long long int now=i;now=now*now*now;len=0;long long int cur=now;if(now>n)break;while(now!=0){A[++len]=now%10;now=now/10;}int ok=1;for(int j=1;j<=len/2;j++){if(A[j]!=A[len-j+1]){ok=0;break;}}if(ok){ans=cur;}}printf("%lld",ans);return 0;
}
G题解题思路
因为涉及到对应某个人的分数数值修改,所以说我们需要标记出每个人的分数情况,以便快速查询并且修改。分数数值的改变会带来两个影响:
1 旧分数的总个数-1
2 新分数的总个数+1
那么涉及到种数的减少或增加,所以我们要标记每个分数的总数
当某种分数的总数因为当前操作,数量变为0时,种数减1.
当然本题需要用到map来标记
#include<bits/stdc++.h>
using namespace std;
map<int,long long int >vis;
map<long long int,int>k;
int main(){int n;cin>>n;int t;cin>>t;int ans=1;for(int i=1;i<=n;i++){vis[i]=0;}k[0]=n;for(int i=1;i<=t;i++){int pos,vel;cin>>pos>>vel;if(k[vis[pos]]==1){ans--;} k[vis[pos]]--;if(k[vis[pos]+vel]==0){ans++;} k[vis[pos]+vel]++;vis[pos]+=vel;cout<<ans<<'\n';}return 0;
}
望同学们再接再厉,每人进步
这篇关于2024.3.13abc晚训题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!