• 【uva 11491】Erasing and Winning(算法效率--贪心+单调队列)


    题意:有一个N位整数,要求输出删除其中D个数字之后的最大整数。

    解法:贪心。(P.S.要小心,我WA了2次...)由于规定了整数的位数,那么我们要尽量让高位的数字大一些,也就是要尽量删去前面小的数字。于是我们得到的数字前面是有一串下降的单调队列的,所以最开始就要维护这个。但是要注意——我们不是立马得到了这 n-d 位的整数,而是经过维护单调队列调整后的。因此我下面代码的那句break出循环是错的。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<iostream>
     4 using namespace std;
     5 
     6 const int N=(int)1e5+10;
     7 int a[N];
     8 
     9 int main()
    10 {
    11     while (1)
    12     {
    13       int n,d;
    14       scanf("%d%d",&n,&d);
    15       if (!n&&!d) break;
    16       char c=getchar();
    17       int t,cnt;
    18       t=0;
    19       while (c<'0'||c>'9') c=getchar();
    20       while (c>='0'&&c<='9') a[++t]=c-'0', c=getchar();
    21       t=1, cnt=0;
    22       for (int i=2;i<=n;i++)
    23       {
    24         while (a[i]>a[t] && t>0 && cnt<d) t--,cnt++;
    25         //if (t==n-d) break;//删d个,不能直接把后面的删了
    26         a[++t]=a[i];
    27       }
    28       for (int i=1;i<=n-d;i++) printf("%d",a[i]);
    29       printf("
    ");
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    在泛型方法中返回泛型数组
    java泛型方法返回泛型结果
    hive -e和hive -f的区别(转)
    hive表批处理
    python网络编程——实现简单聊天
    python网络编程(转)
    python分布式编程(转)
    shell多线程之进程间通信(3)
    在xml文件中使用该控件
    Java文件中代码
  • 原文地址:https://www.cnblogs.com/konjak/p/6050927.html
Copyright © 2020-2023  润新知