路过的大佬救救我呗

P1323 删数问题

把最后算的数拼接起来 然后按贪心的思想去删数 假设第i个数为a[i] 删m个数 那么从左往右搜 如果a[i]<a[i+1] 那么可以直接删去a[i] 一直删m个为止 恕我太菜 不会证明 但应该是对的
by little_kongbai @ 2020-12-29 13:18:10


抱歉 上述删数代码翻车 0pts代码 ```cpp #include<bits/stdc++.h> using namespace std; int k,m,Mmin=9,a[30005],tot,ls;bool f[30005]; priority_queue<int> q; void work(int n){ int n_length=0,n2=n; while(n2!=0){ n2/=10; n_length++; } //cout<<n<<" "<<n_length<<endl; n2=n; for(int i=0;i<n_length;i++){ a[tot+n_length-i]=n2%10; n2/=10; } tot+=n_length; } int main(){ scanf("%d%d",&k,&m);q.push(-1); memset(f,1,sizeof(1)); for(int i=1;i<=k;i++){ ls=-q.top();q.pop(); q.push(-(ls*2+1));q.push(-(ls*4+5)); work(ls); } for(int i=1;i<=tot;i++)printf("%d",a[i]); printf("\n"); for(int i=1;i<=tot;i++){ if(a[i]<a[i+1]&&m>0){ m--; continue; } printf("%d",a[i]); } return 0; } ```
by little_kongbai @ 2020-12-29 14:28:45


``` #include<bits/stdc++.h> using namespace std; string str; char p[100005]; long long K,l,j,m,i=1,ans[1000005]= {1,3},rear,front,q,g; int main() { cin>>K>>m; rear=2; while(rear!=K) { ans[rear++]=i*4+3; if(rear==K) break; ans[rear++]=i*4+5; i=i*2+1; } for(i=0; i<K; i++) cout<<ans[i]; cout<<endl; for(i=K-1; i>=0; i--) while(ans[i]!=0) { p[g++]=ans[i]%10+48; ans[i]/=10; } for(i=g-1; i>=0; i--) { str+=p[i]; } str+='0'; for(i=0; i<=K; i++) { if(str[i]<str[i+1]&&m>0) m--; else cout<<str[i]; } } ``` 我也翻车了
by LN07S—117 @ 2020-12-30 13:27:51


@[linnuo1011](/user/262922) 我现在是40pts 剩下的由于各种操作直接TLE
by little_kongbai @ 2020-12-30 13:36:23


@[kongbaijun](/user/232205) emmm...
by LN07S—117 @ 2021-01-02 12:49:38


经过一番死磕被磕死
by LN07S—117 @ 2021-01-02 12:53:09


@[kongbaijun](/user/232205) 教教我呗 我太菜了
by LN07S—117 @ 2021-01-02 13:02:16


|