目录
A. Short Sort
B. Good Kid
C. Target Practice
D. 1D Eraser
E. Building an Aquarium
F. Money Trees
G. ABBC or BACB
H. Mad City
这种判断是否能变成目标串的我们都是通过一定手段然后看最后是否是直接变成目标串即可
void solve(){
string s; cin>>s;
string ans="abc";
int cnt=0;
for(int i=0;i<3;i++) if(ans[i]!=s[i]) cnt++;
cout<<(cnt<=2 ? "YES" : "NO")<
任意一个数加一等于加上剩下数乘积的两倍所以最小的加1是最优的
void solve(){
cin>>n;
vector a(n);
for(auto&v:a) cin>>v;
sort(a.begin(),a.end());
a[0]++;
int ans=1;
for(auto&v:a) ans*=v;
cout<
找到性质或者直接暴力也行
void solve(){
n=10;
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
char x; cin>>x;
if(x!='.'){
ans+=min({i,j,11-i,11-j});
}
}
cout<
双指针直接去滑动然后把满足的标记一次即可
void solve(){
cin>>n>>m;
vector a;
vector st(n+1);
for(int i=1;i<=n;i++){
char x; cin>>x;
if(x=='B') a.push_back(i);
}
int ans=0;
for(int i=0;i
明显的是二分如果结果很大记得需要使用LL,以及中间退出
void solve(){
cin>>n>>m;
vector a(n);
for(auto&v:a) cin>>v;
auto check = [&](LL mid){
LL ans=0;
for(auto&v:a){
ans+= v<=mid ? mid-v : 0;
if(ans>m) return false;
}
return true;
};
LL l=0,r=1e18;
while(l>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<
明显的双指针求区间最长一段的性质
void solve(){
cin>>n>>m;
vector a(n),h(n);
for(auto&v:a) cin>>v;
for(auto&v:h) cin>>v;
int ans=0;
for(int i=0;im){
sum-=a[last];
last++;
}
ans=max(ans,k-last+1);
}
i=j;
}
cout<
注意观察特性,我们发现每一次消耗的都是A的数量,A的数量是不可以再增加的如果说是ABB,或者BBA可以直接消到底如果两边都是A同时中间没有BB那么必然有一段A被丢弃,一段A同一个B结合
// Problem: G. ABBC or BACB
// Contest: Codeforces - Codeforces Round 898 (Div. 4)
// URL: https://codeforces.com/contest/1873/problem/G
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
void solve()
{
string s; cin>>s;
n=s.size();
int ans=count(s.begin(),s.end(),'A');
if(ans==n){
cout<<0<
先通过递归找到第一个如环的点再通过环上的点去跑原来的路径来找到所有点到这个点的最短距离
void dfs(int u,int fa){
st[u]=true;
for(auto&v:g[u]){
if(~pos) return ;
if(v==fa) continue;
if(!st[v]){
dfs(v,u);
}
else{
pos=v;
return ;
}
}
}
void solve()
{
cin>>n>>s1>>s2;
pos=0;
for(int i=1;i<=n;i++){
st[i]=false;
g[i].clear();
}
for(int i=1;i<=n;i++){
int a,b; cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
pos=-1;
dfs(s2,-1);
queue q;
if(pos==-1 || s1==s2){// 没有环或者就是在一起的
cout<<"NO"<d[u]){
d[v]=d[u]+1;
q.push(v);
}
}
}
cout<<(d[s2] >= d[s1] ? "NO" : "YES")<