谋鬼 2022-02-26 20:30 采纳率: 100%
浏览 61
已结题

小明的数字表51nod求解答

课堂练习:小明的数字表 未完成
小明现在爱上了查询,他遇到了这样一个查询问题,给出 n 个数 (n<=100000),
有 q 个查询 (q<=100000),每组查询 3 个数:u v w,表示查找第 u 位 (个位为第1位,十位为第2位,依此类推)为数字 v 的所有数字中,第 w 小的数,如果这个数字不存在,输出“-1”。

注:不考虑所有数字中的前导 0。

输入格式
第一行输入一个n(n<=100000),表示数列的长度; 第二行n个正整数ai(0<=ai<=100000000); 第三行一个数字q(q<=100000)表示询问的次数; 下面q行,每行给出三个数字u,v,w,表示查找第u位为数字v的所有数字中,第w小的数。
输出格式
每个询问输出一个数字,查询不到输出“-1”。
输入样例
4
1 21 22 3
3
2 2 2
1 1 2
2 2 3
输出样例
22
21
-1
数据范围
n<=100000 0<=ai<=100000000 q<=100000
样例解释
第2位数字为2的数字包括 (21,22) 第 2 小的数字为22;

第1位数字为1的数字包括 (1,21) 第2小的数字为21;

第2位数字为2的数字包括 (21,22) 第3小的数字不存在,输出“-1”

  • 写回答

1条回答 默认 最新

  • fuill 2022-02-26 21:13
    关注

    解答如下

    #include <iostream>
    #include <string.h>
    #include <algorithm>
    #include <stdlib.h>
    using namespace std;
    int f(int n,int p)//返回n的第p位
    {
        char a[10];
        itoa(n,a,10);
        reverse(a,a+strlen(a));
        int r=a[p-1]-48;
        return r;
    }
    int main()
    {
        int n,p,j,u,v,w,t[100000],q,fz[100000],h=0;
        cin >> n;
        for(j=0; j<n; j++)
        {
            cin >> t[j];
        }
        cin >> q;
        while(q--)
        {
            h=0;
            cin >> u>>v >>w;
            for(j=0; j<n; j++)
                if(f(t[j],u)==v)
                    fz[h++]=t[j];
              sort(fz,fz+h);      
        if(w<=h)
            cout << fz[w-1] << endl;
        else
            cout << -1 << endl; 
        }
        return 1;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月26日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了