【求助站外题】:为什么在能找到的情况下不输出正确的数字?
  • 板块学术版
  • 楼主66xyyd
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/8/3 14:58
  • 上次更新2023/11/3 06:09:58
查看原帖
【求助站外题】:为什么在能找到的情况下不输出正确的数字?
946515
66xyyd楼主2023/8/3 14:58

题目:小明的数字表。

题目描述
小明现在爱上了查询,他遇到了这样一个查询问题,给出  个数 ,有  个查询 ,每组查询  个数:,表示查找第  位 (个位为第1位,十位为第2位,依此类推) 为数字  的所有数字中,第  小的数,如果这个数字不存在,输出“-1”。小明不会做这个题,聪明的你可以帮助小明解决这个问题吗?

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

输入格式
第一行输入一个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
【样例说明】

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

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

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

数据范围与提示
n<=100000 0<=ai<=100000000 q<=100000

我的代码:

#include<iostream>
#include<string>
#include<algorithm>
#include<vector> 
using namespace std;
vector<string> ans[13/*114514*/][11];
int n,q;
int main(){
	ios::sync_with_stdio(false);
	cin >> n;
	for(int i=0;i<n;i++){
		string s;
		cin >> s;
//		cout << "get s='" << s << "'.\n";
		for(int j=0,len=s.length();j<len;j++){
//			cout << "\nans[" << len-j << "]=" << s[len-j-1] << ".\n";
			ans[len-j][s[j]-'0'].push_back(s);
		}
	}
	for(int i=1;i<=10;i++){
		for(int j=0;j<10;j++){
			sort(ans[i][j].begin(),ans[i][j].end());
		}
	}
	cin >> q;
	while(q--){
		int u,v,w;
		cin >> u >> v >> w;
		if(w>ans[u][v].size()){
			cout << "-1\n";
			continue;
		} else{
			cout << ans[u][v][w-1] << '\n';
		}
	}
	return 0;
}

所有测试点(n大于10000)均WA。

2023/8/3 14:58
加载中...