SICAU-OJ: 數字遊戲
阿新 • • 發佈:2018-12-27
cin 遊戲 urn bre type sca 容易 scanf scan
數字遊戲
題意:
給出一個長度為n的數字,然後抹去k個數,使得剩下的數最大。
題解:
貪心的思想:讓答案串中每一位盡可能大。
我們肯定要用完這k次的,假設有一個答案字符串ans,我們現在遍歷給出的串,假設當前遍歷到第i位,設其值為a。
我們現在將a與答案串的每一位進行比較,如果a大於答案串中末尾的數,就刪去這個末尾的數讓a代替它,容易證明這樣肯定能使答案更優。
就一直進行這樣的操作使k用完為止。
如果k沒用完,那麽我們就直接刪除答案串的最後幾位就好了~
代碼如下:
#include <bits/stdc++.h> using namespace std; typedeflong long ll; const int N = 1e5; int n,m; int main(){ while(scanf("%d%d",&n,&m)!=EOF){ if(!n && !m) break ; string s; cin>>s; int tmp = n-m; int k = 0; for(int i=0;i<n;i++){ if(i==0) continue ;int a=s[i-1]-‘0‘,b=s[i]-‘0‘; if(b>a && k<m ){ k++; s.erase(i-1,1); i-=2; n--; } } cout<<s.substr(0,tmp)<<endl; } return 0; }
SICAU-OJ: 數字遊戲