描述

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。

现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?

例如: n = 9128456, k = 2, 则生成的新整数最小为12456

输入
第一行t, 表示有t组数据;

接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。
输出
t行,每行一个数字,表示从n中删除k位后得到的最小整数。
样例输入

  1. 2
  2. 9128456 2
  3. 1444 3

样例输出

  1. 12456
  2. 1

这道题刚开始看时,水感十足,只需要找到所有位数中,前k大的数,删除后输出就行了(哎╮(╯▽╰)╭,被样例坑了…………)

错误代码没什么技术含量,就不用秀了吧~~~

后面才发现:我们可以把每一位数连起来,当成一座山:

上图是数字9128456的山峰图,可以看出前一位是9,后面依次排出来,就可以练成像山峰一样的图案,我们要做的,就是将越靠近原点的山峰给切掉,遇峰即切,切了k次以后,所得的数必为最小的,让我们来看个例子:

124563789   3

先把“6”切掉

再退出循环,重新搜索,切“5”

再切“4”

好了,剩下的数字123789就一定为最小了~\(≧▽≦)/~

不说了,丢代码:

  1. <span style="font-size:14px;">#include<cstdio>
  2. #include<cstring>
  3. int a[31],n,k;
  4. void scan()
  5. {
  6. int i;
  7. char c[31];
  8. scanf("%s%d",c,&k);
  9. n=strlen(c);
  10. for(i=0;i<n;i++)
  11. a[i+1]=c[i]-48;
  12. }
  13. void del(int x)
  14. {
  15. int i;
  16. for(i=x;i<=n;i++)//将切掉的地方缝起来
  17. a[i]=a[i+1];
  18. n--;//总长度减一
  19. }
  20. void work()//切山
  21. {
  22. int i,j;
  23. for(i=1;i<=k;i++)
  24. for(j=1;j<=n;j++)
  25. if(a[j]>a[j+1])//判断是否是山峰
  26. {
  27. del(j);//切掉
  28. break;
  29. }
  30. }
  31. void print()
  32. {
  33. int i;
  34. for(i=1;i<=n;i++)
  35. printf("%d",a[i]);
  36. printf("\n");
  37. }
  38. void over(){memset(a,0,sizeof(a));}//多组数据初始化
  39. int main()
  40. {
  41. int nn;
  42. scanf("%d",&nn);
  43. for(;nn;nn--)
  44. {
  45. scan();
  46. work();
  47. print();
  48. over();
  49. }
  50. }</span>

可以,很贪心

NOI4.6 最小新整数——切山游戏的更多相关文章

  1. 【OpenJ_Bailian - 4137】最小新整数 (贪心)

    最小新整数 Descriptions: 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0.n的位数为m.现在从m位中删除k位(0<k < ...

  2. LG3781 [SDOI2017]切树游戏

    题意 题目描述 小Q是一个热爱学习的人,他经常去维基百科学习计算机科学. 就在刚才,小Q认真地学习了一系列位运算符,其中按位异或的运算符\(\oplus\)对他影响很大.按位异或的运算符是双目运算符. ...

  3. FZU 1962 新击鼓传花游戏

    新击鼓传花游戏 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original ID: 19 ...

  4. 基于HTML5和JS实现的切水果游戏

    切水果游戏曾经是一款风靡手机的休闲游戏,今天要介绍的就是一款网页版的切水果游戏, 由JavaSript和HTML5实现,虽然功能和原版的相差太大,但是基本的功能还是具备了,还是模仿的挺逼真,有一定的J ...

  5. 【BZOJ4911】[SDOI2017]切树游戏(动态dp,FWT)

    [BZOJ4911][SDOI2017]切树游戏(动态dp,FWT) 题面 BZOJ 洛谷 LOJ 题解 首先考虑如何暴力\(dp\),设\(f[i][S]\)表示当前以\(i\)节点为根节点,联通子 ...

  6. BZOJ4911: [Sdoi2017]切树游戏

    BZOJ 4911 切树游戏 重构了三次.jpg 每次都把这个问题想简单了.jpg 果然我还是太菜了.jpg 这种题的题解可以一眼秒掉了,FWT+动态DP简直是裸的一批... 那么接下来,考虑如何维护 ...

  7. Java中最小的整数为什么是-2147483648

    Java中最小的整数为什么是-2147483648 假如只有两位来表示数字,第一位是符号位: 00:0 01:1 11:-1,这个是负数,而且是补码,取反为00,加1成为01,就是-1 10:-2,这 ...

  8. (十一)Unity5新特性----实战2D游戏

    孙广东  2015.7.11 在本教程中,将了解到U5新功能.你通过本教程.您将了解下面内容: Changes in Component Access Physics Effectors Adding ...

  9. LOJ2269. 「SDOI2017」切树游戏 [FWT,动态DP]

    LOJ 思路 显然是要DP的.设\(dp_{u,i}\)表示\(u\)子树内一个包含\(u\)的连通块异或出\(i\)的方案数,发现转移可以用FWT优化,写成生成函数就是这样的: \[ dp_{u}= ...

随机推荐

  1. Java并发机制的底层实现原理之volatile应用,初学者误看!

    volatile的介绍: Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现 ...

  2. 同时安装了python3.4和python3.5,如何使用pip?

    首先我们python3.4 -m pip --version一下 再python3.5 -m pip --version 一下 发现两个pip版本不同,在使用pip3时,使用的其实是python3.4 ...

  3. 程序员必须掌握的性能调优 X Y Z

    热评博文:<如何设计出优美的Web API?>,现阅读量超 2500,小伙伴们不要错过哦! 2003 ~ 2008 年,这五年老兵哥我在通信行业做实习生和开发岗,主要用 C / C++ / ...

  4. Django学习小记1-安装配置

    Django是一个开放源代码的Web应用框架,由Python写成. python 中的web框架有许多例如:Django.Tornado.Flask..而Django相较与其他WEB框架其优势为:大而 ...

  5. 小白进阶之路-python与用户交互

    在python3中input会将用户输入的任何内容都存成字符串类型.

  6. MySQL 核心三剑客 —— 索引、锁、事务

    一.常见存储引擎 1.1 InnoDB InnoDB 是 MySQL 5.5 之后默认的存储引擎,它具有高可靠.高性能的特点,主要具备以下优势: DML 操作完全遵循 ACID 模型,支持事务,支持崩 ...

  7. 记一次 爬取LOL全皮肤原画保存到本地的实例

    #爬取lol全英雄皮肤 import re import traceback # 异常跟踪 import requests from bs4 import BeautifulSoup #获取html ...

  8. Linux 文件系统 -- inode 笔记

    什么是 inode inode 的定义:Unix 文件系统中的一种数据结构,用来存储文件的元信息数据   文件在硬盘中的存储是以"块"(block)为单位的,常见的块大小是 4k ...

  9. Java散点

    1.在Java中,所有需要保存在常量池中的数据,长度最大不能超过65535,这当然也包括字符串的定义

  10. NSOperationQueue队列依赖相关思考

    添加依赖后,队列中网络请求任务有依赖关系时,任务结束判定以数据返回为准还是以发起请求为准? waitUntilFinished方法容易误解. 依赖关系 // // ViewController.m / ...