补了一下ABC328 写一篇博客总结一下。
A:题意:
题解:签到题,依题意模拟即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define lop(i,a,b) for(int i=(a);i<(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define el '\n'
typedef pair<int,int> PII;
using LL = long long;
const int INF=0x3f3f3f3f;
void solve()
{
int n=0,sm=0,x=0;
cin>>n>>x;
rep(i,1,n)
{
int y;
cin>>y;
if(y<=x)sm+=y;
}
cout<<sm;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t = 1;
//cin>>t;
while(t--)
solve();
return 0;
}
B:题意:
题解:例如 1月1,1月11,就是月和日的所有组成数字都一样就算。这题数据小,月份和天数都不超过100,所以我的思路是把重数字日期手动算出并记录,后面查看就行了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define lop(i,a,b) for(int i=(a);i<(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define el '\n'
typedef pair<int,int> PII;
using LL = long long;
const int INF=0x3f3f3f3f;
int n,ans=0;
int a[105];
set<PII>s;
void solve()
{
cin>>n;
rep(i,1,n)cin>>a[i];
rep(i,1,9)
{
s.insert({i,i});
s.insert({i,i*11});
s.insert({i*11,i});
s.insert({i*11,i*11});
}
rep(i,1,n)
{
rep(j,1,a[i])
{
if(s.find({i,j})!=s.end())
ans++;
}
}
cout<<ans<<el;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t = 1;
//cin>>t;
while(t--)
solve();
return 0;
}
C:题意
思路:有多次查询区间内的值,很好想到,利用前缀和即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define lop(i,a,b) for(int i=(a);i<(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define el '\n'
typedef pair<int,int> PII;
using LL = long long;
const int INF=0x3f3f3f3f;
const int N=3e5+10;
int n;
char s[N];
int a[N];
void solve()
{
int l,r;
cin>>l>>r;
cout<<a[r-1]-a[l-1]<<el;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t = 1;
cin>>n>>t;
rep(i,1,n)cin>>s[i];
lop(i,1,n)
{
if(s[i]==s[i+1])
a[i]=1;
}
rep(i,1,n)a[i]+=a[i-1];
while(t--)
solve();
return 0;
}
D:题意
思路:利用栈的思想来模拟,当栈顶往下数三个元素为CBA时,就删除即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define lop(i,a,b) for(int i=(a);i<(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define el '\n'
typedef pair<int,int> PII;
using LL = long long;
const int INF=0x3f3f3f3f;
void solve()
{
string s,ans;
cin>>s;
for(auto i:s)
{
ans+=i;
int l=ans.size();
if(l>=3&&ans[l-1]=='C'&&ans[l-2]=='B'&&ans[l-3]=='A')ans.erase((ans.end()-3),ans.end());
}
cout<<ans;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t = 1;
//cin>>t;
while(t--)
solve();
return 0;
}
总结:在补题过程中还是会出现速度慢,或者思路没问题,实现时却困难,总之码力不足,还是多练吧。