「SWUST0433」高精度整数去位去最小问题
Sample Input
1 2 3 |
456547 1 456547 2 103 1 |
Sample Output
1 2 3 |
45547 4547 03 |
代码
妈蛋9018过不了什么心态!超时你妹啊。。。算了我也不知道哪里错了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct data{ int left,right,v; }a[250]; char str[250];int k; bool del(data &x) { if(a[x.right].v<x.v) { a[x.left].right=x.right; a[x.right].left=x.left; k--; return 1; } return 0; } int main() { while(scanf("%s%d",str,&k)!=EOF) { memset(a,0,sizeof(a)); for(int i=1;i<=strlen(str);i++) { a[i].left=i-1; a[i].right=i+1; a[i].v=str[i-1]-'0'; } a[0].right=1;a[strlen(str)+1].left=strlen(str); for(int i=a[0].right;a[i].right>0&&k;i=a[i].right) { int t=a[i].left; while(del(a[i])) { i=t;t=a[i].left; if(k==0)break; } } while(k--)del(a[a[strlen(str)+1].left]); int i=a[0].right; while(a[i].right) { printf("%d",a[i].v); i=a[i].right; } printf("\n"); } return 0; } |
Subscribe