【uva 11491】Erasing and Winning(算法效率--贪心+单调队列)
2024-10-16 16:57:09
题意:有一个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("\n");
30 }
31 return 0;
32 }
最新文章
- 也说说angularJs里的evalAsync
- 如何创建C# Closure ?
- Android中BaseAdapter的基本用法和加载自定义布局!
- MySql的大小写问题
- STL,ATL,WTL的联系与区别
- getpwent()
- [译]Stairway to Integration Services Level 3 - 增量导入数据
- python学习笔记之一:列表与元组
- improper Advertising identifier [IDFA] Usage. Your app contains the Advertising Identifier [IDFA] AP
- Asycn/Await 异步编程初窥
- java队列——queue详细分析
- 多线程&;定时器Timer&;同步&;线程通信&;ThreadLocal
- c/c++ 模板函数的重载
- PHP中使用CURL实现GET和POST请求(转载)
- Socket.IO学习之基础入门
- Linux命令之shutdown
- Java实现bt文件下载、制作、解析、磁力链接
- 关于css伪类
- Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)
- node学习笔记第一天