AT433
2025-11-23 20:41:00
发布于:广东
A
这种题目太一眼了
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,y,z; cin>>x>>y>>z;
for(int i=0;i<=1e7;i++){
if((x+i)%(y+i)==0){
if((x+i)/(y+i)==z){
cout<<"Yes";
return 0;
}
}
}
cout<<"No";
return 0;
}
B
比A简单
#include<bits/stdc++.h>
using namespace std;
int n;
const int N=107;
int a[N];
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
bool flag=true;
for(int j=i-1;j>=1;j--){
if(a[j]>a[i]){
cout<<j<<endl;
flag=false;
break;
}
}
if(flag) cout<<-1<<endl;
}
return 0;
}
C
上难度了,O(n3)的时间复杂度是一眼可以看出来的,考虑用O(n)来预处理,最后再计算
#include<bits/stdc++.h>
using namespace std;
const int N=1e+7;
int a[N];
int main(){
string s; cin>>s;
if(s.size()==1){
cout<<0; return 0;
}
char first=s[0]; int len=1;
int cnt=0;
for(int i=1;i<s.size();i++){
if(s[i]==first){
len++;
}
else{
a[++cnt]=(first-'0')*10000000+len;
first=s[i];
len=1;
}
}
int sum=0;
a[++cnt]=(first-'0')*10000000+len;
if(cnt==1) cout<<0;
else{
for(int i=1;i<cnt;i++){
if(a[i+1]/10000000-a[i]/10000000==1){
sum+=min(a[i]%10000000,a[i+1]%10000000);
}
}
cout<<sum;
}
return 0;
}
D
咋说呢感觉比C难一点,用map加神秘数学方法
#include<bits/stdc++.h>
long long pow10(int k,long long m){
long long r=1,b=10;
while(k>0){
if(k%2)r=r*b%m;
b=b*b%m;
k/=2;
}
return r;
}
using namespace std;
int main(){
int n,m;
cin>>n>>m;
vector<long long>a(n);
for(int i=0;i<n;i++)cin>>a[i];
map<int,map<long long,int>>mp;
for(int i=0;i<a.size();i++){
int l=to_string(a[i]).size();
long long mv=(-a[i])%m;
if(mv<0) mv+=m;
mp[l][mv]++;
}
map<int,long long>pw;
for(int k=1;k<=10;k++) pw[k]=pow10(k,m);
long long ans=0;
for(int i=0;i<a.size();i++){
for(auto&p:mp){
int k=p.first;
long long t=(a[i]%m)*pw[k]%m;
ans+=p.second.count(t)?p.second[t]:0;
}
}
cout<<ans;
return 0;
}
这里空空如也












有帮助,赞一个