A小红的正整数自增

思路,暴力,很显然嘛,最多加9次,就百分百有0为结尾了

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n,sum=0;
cin>>n;
while(n%10!=0){
sum++;
n++;
}
cout<<sum;
}

B小红的抛弃后缀

思路:抛弃后缀哎,咱们直接遍历字符串,然后慢慢加前缀就可以了,为了保证前缀部分是9的倍数,那么根据模的特性,比如Z%9=(x+y)%9=(x)%9+(y)%9,所以好说了,咱们直接遍历这个字符串就可以了

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
string s;
int sum=0,cnt=0;
cin>>s;
//reverse(s.begin(),s.end());
for(int i=0;i<s.size();i++){
sum*=10;
sum+=s[i]-'0';
sum%=9;
if(!sum)cnt++;
}
cout<<cnt;
}

C小红的字符串构造

思路:咱们看题,题说k<=n/2,这不就是暗示aa是一个回文吗,然后假如不想有回文,直接abc添

代码:

#include<bits/stdc++.h>
using namespace std;

signed main(){
int n,k,sum=0,f=0,cnt=1;
cin>>n>>k;
for(int i=0;i<k;i++){
char c=i%26+'a';
cnt++;
cout<<c<<c;
}
for(int i=cnt;i<n-2*k+cnt;i++){
char c=i%26+'a';
cout<<c;

}
}

D小红的平滑值插值

思路:小问题啦,咱们首先知道两个数字数字之差最大要求是k,那么咱们只要保证两个数直接的差 sum += (f+k-1) / (k)-1;,用这个公式不就🆗了,减一是为了保证假如差刚好是k的倍数,向上取整是为了保证插入后两个数之间的值一定小于等于k,然后要注意一种情况,2 2 1 1,因为两个相等的数之间的差为0,然可能数据比较弱,我感觉我直接猜出了数据,就刚刚的案例,然后直接特判一下就可以了

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n,k,sum=0,_u=0;
cin>>n>>k;
vector<int>v(n+1);
for(int i=1;i<=n;i++){
cin>>v[i];
}
for(int i=2;i<=n;i++){
int f=abs(v[i]-v[i-1]);
_u=max(_u,f);
if(f<=k)continue;
if(f>k) {
sum += (f+k-1) / (k)-1;
}
}
if(_u==k){
cout<<sum;
}else{
sum=sum==0?1:sum;
cout<<sum;
}
}

E小苯的等比数列

思路:无敌的ioi赛制让我可以随意的尝试思路的对错,然后发现,这个题不就是个暴力嘛,我暴力就欧克啦,记得暴力也要优化,还有特判1的情况,否则只能混分

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n,sum=1;
cin>>n;
vector<int>v;
map<int,int>m;
for(int j=1;j<=n;j++){
int t;
cin>>t;
if(m[t]==0){
v.push_back(t);
}
m[t]++;
sum=max(m[t],sum);
}
sort(v.begin(),v.end());
for(int i=2;i<=sqrt(200000);i++){
int gg=sqrt(v.size());
for(int j=0;j<gg;j++){
int k=v[j];
int cf=1;
while(m[k]!=0){
k*=i;
if(!m[k])break;
cf++;
}
int f=sum;
sum=max(sum,cf);
}
}
cout<<sum;
}

 

posted on 2024-03-25 19:37  塔罗-太阳  阅读(18)  评论(0)    收藏  举报