1. 程式人生 > 其它 >P1106 刪數問題 / U83355 刪數問題【升級版】

P1106 刪數問題 / U83355 刪數問題【升級版】

P1106 刪數問題/U83355 刪數問題【升級版】

貪心+連結串列

當一個數字比後面一個數字大時,刪去這個數是更優的。

連結串列實現O(1)單點刪除操作。

注意刪去前導0,並且注意答案為0時不要刪光了

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=500005;
char q[N];
int a[N],L[N],R[N],lq,s;
int main(){
    int T; scanf("%d",&T);
    while(T--){
        scanf(
"%s",q); lq=strlen(q); for(int i=1;i<=lq;++i) L[i]=i-1,R[i]=i+1,a[i]=q[i-1]-'0'; L[lq+1]=lq; R[0]=1; scanf("%d",&s); for(int i=1;i!=lq+1&&s;){ if(a[i]>a[R[i]]){ R[L[i]]=R[i]; L[R[i]]=L[i]; i
=L[i]; --s; }else i=R[i]; } for(int i=L[lq+1];i&&s;i=L[i]) R[L[i]]=lq+1,--s; bool k=0; for(int i=R[0];i!=lq+1;i=R[i]) if(a[i]||k) printf("%d",a[i]),k=1; if(!k) printf("0"); puts(""); } return 0; }