A
按题意乱搞
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
signed main() {
string str;
cin>>str;
if(str=="AAA" || str=="BBB") puts("No");
else puts("Yes");
}
B
老套的题目,按余数讨论即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
signed main() {
int n,a,b;
cin>>n>>a>>b;
int ans=n/(a+b)*a;
int r=n%(a+b);
if(r>a) ans+=a;
else ans+=r;
cout<<ans;
}
C
找到答案的可能区间然后找最小数即可,注意不要使用浮点
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
signed main() {
int a,b;
cin>>a>>b;
int l=max(10*b,(25*a+1)/2);
int r=min(10*b+10,(25*a+25+1)/2);
int L=l+0.1,R=r+0.1;
if(L<R) cout<<L;
else cout<<-1;
}
D
维护头尾两个栈和一个翻转标记
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
string str;
vector <char> v[2];
int fg=0;
int q;
int t1,t2;
signed main() {
ios::sync_with_stdio(false);
cin>>str;
cin>>q;
for(int i=1;i<=q;i++) {
cin>>t1;
if(t1==1) {
fg^=1;
}
else {
cin>>t2;
char ch;
cin>>ch;
if(t2==1) {
v[fg].push_back(ch);
}
else {
v[fg^1].push_back(ch);
}
}
}
if(fg==0) {
while(v[0].size()) cout<<v[0].back(), v[0].pop_back();
cout<<str;
for(char c:v[1]) cout<<c;
}
else {
while(v[1].size()) cout<<v[1].back(), v[1].pop_back();
reverse(str.begin(),str.end());
cout<<str;
for(char c:v[0]) cout<<c;
}
}
E
如果 \((p,10)=1\),那么如果一个答案 \(k\) 不是 \(p\) 的倍数, \(10^rk\) 也不是,因此直接处理出大数的带位权前缀和,然后暴力数出 \(\bmod p\) 后各余数对应的端点有多少个来计算区间数即可
否则,\(p=2\) 或 \(p=5\),根据初等数论的结论,这两个数字的整除性可以根据尾数判断
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
int n,c[10005],p,a[N],s[N],pw[N],ans;
char str[N];
signed main() {
cin>>n>>p>>str+1;
for(int i=1;i<=n;i++) a[i]=str[i]-'0';
if(__gcd(p,10ll)==1) {
pw[0]=1;
for(int i=1;i<=n;i++) pw[i]=pw[i-1]*10%p;
for(int i=1;i<=n;i++) s[i]=(s[i-1]+pw[n-i]*a[i])%p;
for(int i=0;i<=n;i++) c[s[i]]++;
for(int i=0;i<p;i++) ans+=c[i]*(c[i]-1)/2;
cout<<ans;
}
else if(p==2) {
for(int i=1;i<=n;i++) if(a[i]%2==0) ans+=i;
cout<<ans;
}
else if(p==5) {
for(int i=1;i<=n;i++) if(a[i]%5==0) ans+=i;
cout<<ans;
}
}
F
待填坑