| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5243 人关注过本帖
标题:一个oj题 测试结果正确就是提交不上,
只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
收藏
已结贴  问题点数:20 回复次数:6 
一个oj题 测试结果正确就是提交不上,
寻找最大数
时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,

比如当n=92081346718538,m=10时,则新的最大数是9888

 

输入
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
样例输入
2
92081346718538 10
1008908 5
样例输出
9888
98

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        string n;
        int m;
        cin>>n>>m;
        sort(n.begin(),n.end());
        for(int i=n.length()-1;i>=m;i++)
            cout<<n[i]-'0';
        cout<<endl;
    }
    return 0;
}
搜索更多相关主题的帖子: 测试 一行 数据 输出 int 
2018-03-29 11:08
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
解决了,,刚开始没注意题目要求

#include <iostream>
using namespace std;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int m;
        string n;
        cin>>n>>m;
        int len=n.length();
        int t1=0,temp=m;
        
        for(int i=0;i<len-m;i++)
        {
            int j;
            char Max;
            for(j=t1,Max=n[t1];j<=temp;j++)
            {
                if(n[j]>Max)
                {
                    Max=n[j];
                    t1=j;
                }
            }
            cout<<Max;
            temp++;
            t1++;
        }
        cout<<endl;
    }
    return 0;
}
2018-03-29 14:10
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
取消排序

能编个毛线衣吗?
2018-03-29 14:28
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
应该是方法问题,排序从大到小取不一定是正确结果,例如911819这样取其中三个数应该是989,但排序后变成了998,题目强调了是原次序~更何况排序本身就会超时(这题数据较小还说得过去)~

简单说就是用优先队列,从最低位开始取,队列没有饱和的时候遇见元素进队并设置当前最大元素MAX,队列饱和的时候遇到大于等于MAX的进队并更新MAX,并且通过优先队列对堆顶元素进行出队,这样算法复杂度为o(n*log(n))看见数据范围大小100应该允许时间复杂度为o(n^2)甚至是o(n^3)的算法吧~



[此贴子已经被作者于2018-3-29 15:29编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-03-29 14:42
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 2楼 花脸
看出来就是每次遍历一次数组取最大的一位,然后下一次直接遍历前面部分,简单容易理解,算法复杂度为o(n^2);
笑了

吃瓜去~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-03-29 14:50
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 3楼 wmf2014
2018-03-29 22:34
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 5楼 九转星河
新手上路多谢指导
2018-03-29 22:55
快速回复:一个oj题 测试结果正确就是提交不上,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016629 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved