a题,水题,根据题意可知
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n;
cin>>n;
long long m=n%10;
if(m==0){
cout<<0;
return 0;
}
cout<<10-m;
return 0;
}
b题,有一种数位和判断,是一种结论就是比如45,4和5加起来就是9的倍数
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
cin>>s;
int ans=0;
int sum=0;
for(int i=0;i<s.size();i++){
sum=(sum+(s[i]-'0'))%9;
if(sum==0){
ans++;
}
}
cout<<ans;
return 0;
}
c题,不要被样例骗了,回文子串在于是比如aa这种就算一种,aaa这种构造不太好想,利用简单构造,直播间听的思路,确实也被震惊住了,每次都被样例骗
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
string a="xyz",b="def";
string s;
for(int i=0,j=0;i<k;i++){
s+=a[j];
s+=a[j];
j=(j+1)%3;
}
int j=0;
while(s.size()<n){
s+=b[j];
j=(j+1)%3;
}
cout<<s;
return 0;
}
d题,根据相邻两项的相减得出的绝对值,然后为了避免向上取整,于是进行减一去除k值得出要插入的数,但是首先还要找出相减得出的绝对值的最大值,如果是等于k,那么不进行任何操作,如果是小于,好加一
#include <bits/stdc++.h>
using namespace std;
// 2024 OneWan
int a[100005];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, k;
cin >> n >> k;
for (int i = 1 ; i <= n ; i++) {
cin >> a[i];
}
int mx = 0;
for (int i = 2 ; i <= n ; i++) {
mx = max(mx, abs(a[i] - a[i - 1]));
}
if (mx < k) {
cout << 1 << "\n";
} else if (mx == k) {
cout << 0 << "\n";
} else {
long long cnt = 0;
for (int i = 2 ; i <= n ; i++) {
if (abs(a[i] - a[i - 1]) > k) {
cnt += (abs(a[i] - a[i - 1]) - 1) / k;
}
}
cout << cnt << "\n";
}
return 0;
}
e题,感觉有点像最长子序列的上升,但是变了一种形式,先用mp存下数字,然后开个双重循环找最长的的数
#include<bits/stdc++.h>
using namespace std;
const int Maxn=2e5;
int mp[Maxn];
int main(){
int n;
cin>>n;
if(n==1){
cout<<1;
return 0;
}
int ans=2;
for(int i=1;i<=n;i++){
int s;
cin>>s;
mp[s]++;
ans=max(ans,mp[s]);
}
for(int q=2;q*q<=Maxn;q++){
for(int a1=1;a1<=Maxn;a1++){
if(mp[a1]){
int x=a1,len=1;
while(x<=Maxn/q&&mp[x*q]){
x*=q;
len++;
}
ans=max(len,ans);
}
}
}
cout<<ans;
return 0;
}
好吧,f,g等会来补,马上去上课了