标签:strlen clear span 开始 namespace i++ cstring style iostream
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
2 92081346718538 10 1008908 5
9888 98
我突然不知道怎么来表达了
我们将字符串的位序表示下 0 1 2 3 4 5 6 7 8 9 10 11 12 。。。。。假如我们要删除m个数字 使得最大,我们可以在序列里面【0-m】中找一个最大的t(位序)
然后从这个【t+1,m+1]开始找 只需要找len-m次
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<queue> 7 #include<map> 8 #include<set> 9 #include<vector> 10 #include<cstdlib> 11 #include<string> 12 #define eps 0.000000001 13 typedef long long ll; 14 typedef unsigned long long LL; 15 using namespace std; 16 const int N=100000+10; 17 char str[N]; 18 int vis[N]; 19 map<char,int>mp; 20 int main(){ 21 int t; 22 scanf("%d",&t); 23 while(t--){ 24 memset(vis,0,sizeof(vis)); 25 mp.clear(); 26 int m; 27 scanf("%s",str); 28 scanf("%d",&m); 29 int ans=0; 30 int len=strlen(str); 31 int t=0;int tt=m; 32 for(int k=0;k<len-m;k++){ 33 char c=‘0‘; 34 for(int i=t;i<=tt;i++){ 35 if(str[i]>c){ 36 t=i; 37 c=str[i]; 38 } 39 } 40 vis[t]=1; 41 t++; 42 tt++; 43 } 44 for(int i=0;i<len;i++){ 45 if(vis[i]==1)cout<<str[i]; 46 } 47 cout<<endl; 48 } 49 }
标签:strlen clear span 开始 namespace i++ cstring style iostream
原文地址:http://www.cnblogs.com/Aa1039510121/p/6481666.html