| 记录编号 |
611872 |
评测结果 |
WAAAWAWWAW |
| 题目名称 |
Sayaku,移动 |
最终得分 |
50 |
| 用户昵称 |
RpUtl |
是否通过 |
未通过 |
| 代码语言 |
C++ |
运行时间 |
0.030 s |
| 提交时间 |
2026-02-07 11:16:31 |
内存使用 |
3.88 MiB |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define pir pair<int,int>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
inline int re()
{
int f=1,num=0;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
return num*f;
}
int T;
void clear();
const int N=2010;
int n;
char c[N];
int ls[N],rs[N];
int dfs(int x,int l,int r)
{
if(c[x]=='0') return x;
else if(c[x]=='1')
{
ls[x]=x+1;
return dfs(x+1,l+1,r);
}
else if(c[x]=='2')
{
rs[x]=x+1;
return dfs(x+1,l+1,r);
}
else if(c[x]=='3')
{
ls[x]=x+1;
rs[x]=dfs(x+1,l+1,r)+1;
return dfs(rs[x],rs[x],r);
}
}
int ans=0x3f3f3f3f;
int res[N][2];
pir solve(vector<int> &vec)// fi : 0 , se : 1
{
vector<int> v1,v2;v1.clear();v2.clear();
for(int x:vec) if(ls[x]) v1.pb(ls[x]);
for(int x:vec) if(rs[x]) v2.pb(rs[x]);
if(v1.size()==0&v2.size()==0) return mp(0,0);
else if(v1.size()==0)
{
pir tmp=solve(v2);
return mp(tmp.fi+1,tmp.se+2);
}
else if(v2.size()==0)
{
pir tmp=solve(v1);
return mp(tmp.fi+1,tmp.se+2);
}
else
{
pir tmp1=solve(v1),tmp2=solve(v2);
return mp(min(tmp1.se+tmp2.fi,tmp2.se+tmp1.fi)+3,tmp1.se+tmp2.se+4);
}
}
void work()
{
freopen("movement.in","r",stdin);
freopen("movement.out","w",stdout);
clear();
scanf("%s",c+1);
n=strlen(c+1);
dfs(1,1,n);
vector<int> tmpp;tmpp.clear();tmpp.pb(2);
if(ls[1]==0||rs[1]==0) ans=min(ans,1+solve(tmpp).fi);
{
int now=1;
vector<int> vec;vec.clear();
while(now)
{
if(rs[now]) vec.pb(rs[now]);
now=ls[now];
}
ans=min(ans,3+solve(vec).se);
vec.clear();now=1;
while(now)
{
if(ls[now]) vec.pb(ls[now]);
now=rs[now];
}
ans=min(ans,3+solve(vec).se);
}
printf("%d\n",ans);
return;
}
int main()
{
T=1;
while(T--) work();
return 0;
}
void clear()
{
return;
}