AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
const int N=10;
int s[N];
int n,x;
void solve() {
cin>>n>>x;
for(int i=1;i<=n;i++) cin>>s[i];
int ans=0;
for(int i=1;i<=n;i++){
if(s[i]<=x) ans+=s[i];
}
cout<<ans<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
直接暴力循环
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
const int N=110;
int d[N];
int n;
void solve() {
cin>>n;
for(int i=1;i<=n;i++) cin>>d[i];
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=d[i];j++){
string s=to_string(i)+to_string(j);
bool ok=true;
for(int k=1;k<(int)s.size();k++){
if(s[k]!=s[k-1]){
ok=false;
break;
}
}
if(ok) ans++;
}
}
cout<<ans<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
利用前缀和的思想,快速统计某区间满足题意的p的个数
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
const int N=3e5+10;
int pre[N];
int n,q;
string s;
void solve() {
cin>>n>>q;
cin>>s;
s=' '+s;
pre[1]=1;
for(int i=2;i<=n;i++){
if(s[i]==s[i-1]) pre[i]=pre[i-1]+1;
else pre[i]=pre[i-1];
}
for(int i=0;i<q;i++){
int l,r;
cin>>l>>r;
cout<<pre[r]-pre[l]<<endl;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
利用string的find函数和erase函数
超时代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
string s;
void solve() {
cin>>s;
auto pos=s.find("ABC");
if(pos==s.npos){
cout<<s<<endl;
return;
}
while(pos!=s.npos){
s.erase(s.begin()+pos,s.begin()+pos+3);
pos=s.find("ABC");
}
cout<<s<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
糊涂了,这题很明显用栈的
然后还是错,想的是判断栈顶是A,然后后面两个字符分别是B和C,但是如果栈里面存的是A和B,然后删了一个ABC之后,下一个刚好是B的话就错了
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
string s;
stack<char>q;
void solve() {
cin>>s;
int n=s.size();
s+='X';
for(int i=0;i<n;i++){
if(q.size()&&q.top()=='A'&&s[i]=='B'&&s[i+1]=='C') q.pop(),i++;
else q.push(s[i]);
}
string tmp="";
while(q.size()){
tmp=q.top()+tmp;
q.pop();
}
cout<<tmp<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
如果是存字符的话,可以用string代替栈,每插入一个字符,就判断最后三个字符是否是ABC,也可以用vector代替栈,好处是不仅可以知道栈顶,即最后一个元素,还可以知道倒数第二个,第三个...
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
string s;
void solve() {
cin>>s;
string tmp="";
for(int i=0;i<(int)s.size();i++){
tmp.push_back(s[i]);
if(tmp.size()>=3&&tmp[tmp.size()-3]=='A'&&tmp[tmp.size()-2]=='B'&&tmp[tmp.size()-1]=='C'){
tmp.pop_back();
tmp.pop_back();
tmp.pop_back();
}
}
cout<<tmp<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}