G

091马晨恺 - 贪心练习4 - 数位删减 - TLE原因

public
Guest Apr 28, 2025 Never 8
Clone
C++ 091马晨恺 - 贪心练习4 - 数位删减 - TLE原因 43 lines (42 loc) | 1.12 KB
1
/*
2
总时间复杂度 O(T X^2) TLE,
3
考虑优化:
4
1、如果不限制前导 0,维护一个 单调栈/单调队列即可
5
a、如果栈是空的,直接放入元素
6
b、如果栈非空,
7
循环判定
8
如果,当前元素比栈顶 小,就删除栈顶元素,k--
9
否则,循环结束
10
当前元素进栈
11
12
2、限制前导 0, 即 最后 0 不能成为第一位的 数
13
a、可知,前 k 位的最小非零数,一定是答案的开头;
14
b、记录这个数的位置,之前的全部删除,然后输出这个数
15
c、然后,就 可以 按第一种情况处理了
16
*/
17
#include<bits/stdc++.h>
18
using namespace std;
19
int t,k;
20
string s,h;
21
int main(){
22
cin>>t;
23
while(t--){ // O(T)
24
cin>>s>>k;
25
h=s;
26
char minn;
27
while(k>0){
28
for(int i=0;i<s.size()-1;i++){ // O(X)
29
if(k>0&&s[i]>s[i+1]&&!(s[i+1]=='0'&&i==0)){
30
s.erase(i,1); // O(X) 该算法,需要遍历字符串
31
k--;
32
break;
33
}
34
if(k>0&&i==s.size()-2){
35
s.erase(i+1,1);
36
k--;
37
}
38
}
39
}
40
cout<<s<<"\n";
41
}
42
return 0;
43
}
44