比赛链接
VP时间 2024/6/26

AB顺利,C刚开始没看懂,求助队友翻译才看懂,然后接了个电话大概20分钟,C写完还交错一次,然后又发现数组开小了。
D刚开始特判n2和n3的情况,接着特判有0的情况,很快发现1很难处理。第一次想着遍历字符串,找到其中最小的两位数,其余数除了1都加。第二次考虑当两位数的个位为1时,且十位数大于等于前一位时取当前的十位为个位,前一位为十位。第三次看过题解发现要遍历讨论每一个数作为十位的情况,改代码提交wa2,看样例猜测应该是210。检测发现是特判n==3的地方少了一个括号导致出问题。
D题ac代码
void slove()
{
cin >> n >> s;// >> z >> k;
if(n==2)
{
cout << (s[0]-'0')*10+s[1]-'0' <<'\n';
return ;
}
if(n==3)
{
int ans1=(s[0]-'0')*10+(s[1]-'0')+(s[2]-'0');
int ans2=((s[0]-'0')*10+(s[1]-'0'))*(s[2]-'0');
//原来是(s[0]-'0')*10+(s[1]-'0')*(s[2]-'0')
//相当于个位先乘后面的数才加十位
int ans3=(s[0]-'0')+((s[1]-'0')*10+(s[2]-'0'));
int ans4=(s[0]-'0')*((s[1]-'0')*10+(s[2]-'0'));
cout << min({ans1,ans2,ans3,ans4}) <<'\n';
return ;
}
if(s[0]=='0')
{
cout << "0\n";
return;
}
int ans=0;
for(int i=0;i<n;i++)
{
if(s[i]=='0')
{
cout <<"0\n";
return ;
}
else if(s[i]!='1')
ans+=(s[i]-'0');
}
int sum=ans+91;
for(int i=0;i<n-1;i++)
{
int a=s[i]-'0';
int ss = ans+a*9;
if(s[i+1]=='1') ss++;
if(s[i]=='1') ss++;
sum=min(sum,ss);
}
cout << sum <<'\n';
}

总结
没啥好说的,写代码要记得带脑子……
695

被折叠的 条评论
为什么被折叠?



