洛谷题目P1106 删数问题

题目来源:https://www.luogu.com.cn/problem/P1106

`
struct NUM
{
int num;
int i;
}nums[250];
bool cmp(const NUM& i, const NUM& j) {
if (i.num < j.num) { return true; }
else { return false; }
}

int main() {
string n;cin >> n;string res = "";
int k;cin >> k;
int startn = 0;
while (k > 0) {
for (int i = startn;i <= k + startn;i++) {
nums[i].num = n[i] - '0';
nums[i].i = i;
}
sort(nums + startn, nums + k + startn + 1, cmp);
int jc = nums[startn].i - startn;
k -= jc;
res += (nums[startn].num + '0');
startn = nums[startn].i + 1;
}
for (int j = startn;j < n.size();j++) {
res += n[j];
}
int sn = 0;
for (int j = 0;j < res.size();j++) {
if (res[j] != '0') {
sn = j;
break;
}
}
for (int j = sn;j < res.size();j++) {
cout << res[j];
}
return 0;
}`
丑陋代码……自己都不想看
主要折腾来去的点在于while循环内的部分,第一次错在sort函数的结尾处写错了,应该“nums + k + startn + 1”的但是忘了+1;
第二次改完错在jc变量,一开始这玩意儿我写的是“int jc = nums[startn].i ”后来意识到不对啊随着迭代越来越往后i也增加,它得跟startn关联起来才能说实现一个类似窗口往后滑动的状态
……简而言之是滑动的时候要把握好那个窗口起点的变化吧,,脑子清楚点就行了;;
第三次交WA是因为string有0开头的,但是实际上数字0开头要删掉0;改掉之后就AC了

posted @ 2025-05-08 16:43  yubai111  阅读(10)  评论(0)    收藏  举报