数字游戏
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 178 Accepted Submission(s) : 58
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
小艾和小牛在上数学课的时候觉得非常的无聊,于是他们想出了一个新的游戏,小牛写下N位的数字,小艾的任务就是在去除了K位后得到一个最大的数。
Input
输入有多组数据。第一行输入一个N和一个K( 1 <= K < N <= 500 000 ). 接下来就是N位数字,确保输入数据中没有前导0。
Output
输出去除了K位后的最大数字。
Sample Input
4 2 1924 7 3 1231234 10 4 4177252841
Sample Output
94 3234 775841
题意:给定一串数字共n位求删除k位后使得删除后的数字最大
解题思路:要使删除后的数字最大,需每次删除递增序列中最小的那个数,若整个序列为单调递减序列则一次删除最后一个数。因为数据量较大。需要用单调队列。维护一个单调递减的序列即可
#include<stdio.h>
int p[5005];
char sp[5005];
int main()
{
int n,k,i,head,cnt;
while(scanf("%d%d",&n,&k)==2)
{
head=0;
getchar();
gets(sp);
cnt=0;
p[++head]=sp[0]-'0';
for(i=1;i<n;i++)
{
while(p[head]<sp[i]-'0'&&head!=0)
{
if(cnt==k) break;
head--;
cnt++;
}
p[++head]=sp[i]-'0';
}
for(i=1;i<=head;i++)
{
printf("%d",p[i]);
}
puts("");
}
return 0;
}