zoukankan      html  css  js  c++  java
  • SGU 296.Sasha vs. Kate(贪心)

    题意:

      给出长度为n(<=1000)的一个数。输出删掉k个数字后的最大值。

    Solution:

      简单贪心。

          s[i]代表数字s的第i位.

          从前往后第一个满足s[i]>s[i-1]的位置,最优一定是删除s[i-1]的.累计次数t.

          同时对新得到的数同样处理,这里可以只用一个循环.如果用c++ string的话更加方便.

      一直处理到t==k,或者没有满足条件的位置。  

      如果最后删除的次数t<k,只要从最后删掉k-t个数字。

          时间复杂度O(n)

    #include <iostream>
    #include <string>
    using namespace std;
    
    string s;
    int k,t;
    int main()
    {
        cin>>s>>k;
        for(int i=1;i<s.size()&&t<k;++i){
            while(s[i]>s[i-1]){
                s.erase(s.begin()+i-1);
                if(++t==k) break;
                if(--i==0) break;
            }
        }
        while(t<k){
            s.erase(s.end()-1);
            ++t;
        }
        cout<<s<<endl;
    }
    View Code
  • 相关阅读:
    多表查询 left join
    对JS关于对象创建的几种方式的整理
    常见正则表达式
    spring
    富文本编辑器
    Struts2快速入门
    一个MySql Sql 优化技巧分享
    maven
    day3
    Spring MVC
  • 原文地址:https://www.cnblogs.com/keam37/p/4598206.html
Copyright © 2011-2022 走看看