暑期ACM队内练习赛 H题 数字游戏
2012-09-14 11:41
204 查看
H 数字游戏
给你一个N位数,从中去掉K个数字,能得到的最大的数是多少?
INPUT
有T测试数据,每组测试数据第一行由N和K2个整数组成(1 ≤ K < N ≤ 500 000),第二行是N位数(非0开头)。
OUTPUT
对每组数据输出去掉K个数字得到的最大数。
SAMPLE TESTS
给你一个N位数,从中去掉K个数字,能得到的最大的数是多少?
INPUT
有T测试数据,每组测试数据第一行由N和K2个整数组成(1 ≤ K < N ≤ 500 000),第二行是N位数(非0开头)。
OUTPUT
对每组数据输出去掉K个数字得到的最大数。
SAMPLE TESTS
IN | OUT |
3 4 2 1924 7 3 1231234 10 4 4177252841 | 94 3234 775841 |
program: #include <cstdio> #include <vector> #include <algorithm> using namespace std; const int MAXN = 500005; char s[MAXN], a[MAXN]; vector< int > v[10]; int main( void ) { // freopen( "d.in","r",stdin ); // freopen( "out.txt","w",stdout ); int n, k,t; scanf("%d",&t); while(t--) { for(int i=0;i<10;i++) v[i].clear(); scanf( "%d %d", &n, &k ); scanf( "%s", s ); for( int i = n-1; i >= 0; --i ) v[ s[i]-'0' ].push_back( i ); int m = n-k, p = 0; for( int i = 0; i < m; ++i ) { //biramo n-k znamenaka for( int j = 9; j >= 0; --j ) { while( v[j].size() > 0 && v[j].back() < p ) v[j].pop_back(); if( v[j].size() > 0 && n-v[j].back()-1 >= m-i-1 ) { p = v[j].back(); break; } } a[i] = s[p]; p++; } a[m] = '\0'; puts( a ); } return 0; }
相关文章推荐
- C语言基础项目练习-猜数字游戏
- c语言练习 4-4. 猜数字游戏
- 数学练习二:互联网数字游戏
- 数学练习二:互联网数字游戏
- J2ME游戏设计基础练习1_用图片数字代替文本数字绘制
- 蓝桥杯练习系统-数字游戏
- 第三周练习 随机函数应用于游戏-猜数字
- CodeForces About arry 暑期小练习 数字的统计
- python小练习8:猜数字游戏
- 数学练习二:互联网数字游戏
- 数学练习二:互联网数字游戏
- 蓝桥杯练习—数字游戏
- 数学练习二:互联网数字游戏
- 第四周上机实践项目 项目3--随机函数应用游戏(1)猜数字游戏
- C语言编程练习--念数字
- 猜数字游戏的提示( Master-Mind Hints UVA - 340)
- 猜数字游戏(java)
- 游戏 数字
- 蓝桥杯练习系统——数字特征
- BZOJ1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏