赛时AC:ABC rating:658 补题:ABCDE
A
删除' . ' 不必删除,遇到‘ . ’不输出就可以
字符串
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
const ll N=2e5+5;
const ll mod=1e9+7;
ll a[N];
void solve()
{
string s;
cin>>s;
ll n=s.size();
for(int i=0;i<n;i++)
{
if(s[i]!='.')
{
cout<<s[i];
}
}
cout<<'\n';
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t=1;//cin>>t;
while(t--)
{
solve();
}
}
B
因为答案一定存在。
预处理3的次幂,把m从3的最高次幂依次向下减去就可以。
类似于受限制2进制
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
const ll N=2e5+5;
const ll mod=1e9+7;
ll a[N];
ll ans[N];
void solve()
{
ll m;
cin>>m;
for(ll i=0;i<=10;i++)
{
a[i]=pow(3,i);
}
ll cnt=0;
while(m)
{
for(int i=10;i>=0;i--)
{
if(m>=a[i])
{
ans[++cnt]=i;
m=m-a[i];
break;
}
}
}
cout<<cnt<<'\n';
for(int i=1;i<=cnt;i++)
{
cout<<ans[i]<<' ';
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t=1;//cin>>t;
while(t--)
{
solve();
}
}
C
初始化计算原数组ABC的个数ans。
每次操作前,若该位置是ABC的成员,则ans--.
操作后,即该位置替换,若是ABC的成员,则ans++.
模拟操作
(主要是想好怎么表达,简洁好实现,又能考虑所有情况)
三个if语句类似,可以用一个3的循环实现,但感觉复制后简单修改更容易理解
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
const ll N=2e5+5;
const ll mod=1e9+7;
ll x[N];
char c[N];
void solve()
{
ll n,q;
cin>>n>>q;
string s;cin>>s;
s=" "+s;
for(int i=1;i<=q;i++)
{
cin>>x[i]>>c[i];
}
ll ans=0;
for(int i=1;i<=n-2;i++)
{
if(s[i]=='A'&&s[i+1]=='B'&&s[i+2]=='C')
{
ans++;
}
}
//cout<<ans;
for(int i=1;i<=q;i++)
{
ll pos=x[i];char op=c[i];
ll f=0;
if(s[pos]=='A')
{
if(pos+2<=n)
{
if(s[pos+1]=='B'&&s[pos+2]=='C')
{
ans--;
}
}
}
else if(s[pos]=='B')
{
if(pos+1<=n&&pos-1>=1)
{
if(s[pos-1]=='A'&&s[pos+1]=='C')
{
ans--;
}
}
}
else if(s[pos]=='C')
{
if(pos-2>=1)
{
if(s[pos-1]=='B'&&s[pos-2]=='A')
{
ans--;
}
}
}
s[pos]=op;
if(s[pos]=='A')
{
if(pos+2<=n)
{
if(s[pos+1]=='B'&&s[pos+2]=='C')
{
ans++;
}
}
}
else if(s[pos]=='B')
{
if(pos+1<=n&&pos-1>=1)
{
if(s[pos-1]=='A'&&s[pos+1]=='C')
{
ans++;
}
}
}
else if(s[pos]=='C')
{
if(pos-2>=1)
{
if(s[pos-1]=='B'&&s[pos-2]=='A')
{
ans++;
}
}
}
cout<<ans<<'\n';
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t=1;//cin>>t;
while(t--)
{
solve();
}
}