滴,省赛体验卡。
和学长学姐们去现场体验,收获也还是挺多的,这几天可能会慢慢总结一下叭。看题:

这道是5月6号的热身赛A题最强大脑~用了简单的贪心算法。可能比赛猛一下看到这道题真的不太好想,我们目前也只知道这一种方法了,思维就比较局限…
思路:把数字当字符串输入,从前往后两两相比较,前面的数如果大于后面的数,则删除前面的数,然后重新对这个新的数再重复两两比较和删除操作,直到删完k次为止(每次只删一个!)。如果这个数字本来就是递增的,从后往前删除k位即可。操作完需要将前导零全部删除。 要注意的是,像1000009这样的数,删除2位后字符串即为空,这时需要控制最后的输出结果为0。
我的蒟蒻代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string x;
int k,t,flag,flag0;
cin >> t;
while(t--)
{
cin >> k;
getchar();
cin >> x;
flag = 0;
for(int i = 0;i < k;i ++)
{
for(int j = 0;j < x.length()-1;j++)
{
if(x[j] > x[j+1] && flag == 0)
{
x.erase(j,1);
flag = 1;
}
}
if(flag == 0)
{
x.erase(x.length()-1,1);
}
flag = 0;
}
flag0 = 0;
while(flag0 == 0)
{
if(x[0] == '0')
{
x.erase(0,1);
}
else
{
flag0 = 1;
}
}
if(x.length() == 0)
{
cout << 0 << endl;
}
else
cout << x << endl;
}
return 0;
}
告辞~
博主分享省赛体验,提到5月6号热身赛A题“最强大脑”用了贪心算法。思路是把数字当字符串输入,两两比较删除数字,删完k次,若数字递增则从后删k位,操作后删除前导零,特殊情况需控制输出结果为0。


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



