A - Not Too Hard (atcoder.jp)
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;
}
B - 11/11 (atcoder.jp)
直接暴力循環
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;
}
C - Consecutive (atcoder.jp)
利用前綴和的思想,快速統計某區間滿足題意的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;
}
D - Take ABC (atcoder.jp)
利用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;
}