A、B、C题:马鸿儒
A题解:
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); long long a,b,c; cin>>a>>b>>c; if(a==b) { cout<<"YES"; return 0; } if(c==0) { if(a==b) cout<<"YES"; else cout<<"NO"; return 0; } if((b-a)%c==0) { if(b>a) { if(c<0) cout<<"NO"; else cout<<"YES"; } else { if(c<0) cout<<"YES"; else cout<<"NO"; } } else cout<<"NO"; }
//分类
B题解:
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); long long n,a,b,c,d; cin>>n>>a>>b>>c>>d; long long ans1=max(a+b,a+c); ans1=max(ans1,b+d),ans1=max(ans1,c+d); long long ans2=LLONG_MAX; ans2=min(a+b,a+c); ans2=min(ans2,b+d),ans2=min(ans2,c+d); // cout<<ans1<<" "<<ans2<<endl; if(n>(ans1-ans2)) cout<<(n-(ans1-ans2))*n; else cout<<0; }
//找数学规律
C题解:
#include <bits/stdc++.h> using namespace std; char s[1000005]; int n,k,pa[1000005],pb[1000005]; int check(int x) { int f=0; for(int i=1;i<=n-x+1;i++) { if(x-(pa[i+x-1]-pa[i-1])<=k) f=1; if(x-(pb[i+x-1]-pb[i-1])<=k) f=1; } return f; } int main() { ios::sync_with_stdio(0); scanf("%d%d%s",&n,&k,s+1); for(int i=1;i<=n;i++) pa[i]=pa[i-1]+(s[i]=='a'),pb[i]=pb[i-1]+(s[i]=='b'); int l=k,r=n; while(r-l>1) { int mid=(l+r)>>1; if(check(mid)) l=mid; else r=mid; } if(check(r)) printf("%d",r); else printf("%d",l); }
//直接二分