小明现在爱上了查询,他遇到了这样一个查询问题,给出 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”。
解答如下
#include <iostream>
#include <string>
#include <algorithm>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int f(int n,int p)//返回n的第p位
{
string a=to_string(n);
reverse(a.begin(),a.end());
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--)
{
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 0;
}