bluecode-【米小游】20250329_3_小米游的数组询问

时间限制:C/C++ 1000MS,其他语言 2000MS

内存限制:C/C++ 256MB,其他语言 512MB

难度:困难

出题人:root

描述

小米游拿到了一个数组,她有若干次询问,每次询问输入一个x,她希望你判断x能否由数组中的两个元素相乘得出。

用数学语言描述,你需要寻找到两个下标i和j(i<j),满足a_i*a_j=x。

输入描述

第一行输入一个正整数n,代表数组的大小。

第二行输入n个正整数a_i,代表数组的元素。

第三行输入一个正整数q,代表询问次数。

接下来的q行,每行输入一个正整数x,代表一次询问。

1 < n,q < 10^5

1< a_i,x < 10^6

输出描述

对于每次询问,如果无法找到两数乘积等于x,请输出-1 -1。

否则输出i和j(i<j),用空格隔开,代表a_i*a_j=x。

用例输入 1

复制代码
5
1 2 3 2 4
2
4
5

用例输出 1

复制代码
2 4
-1 -1

提示

样例1说明

第一组询问,输出1 5也是可以的。

第二组询问,显然无法找到两个元素相乘等于5。

cpp 复制代码
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // 读取数组
    vector<int> a(n);
    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }
    
    int q;
    cin >> q;
    
    // 对于每个询问进行处理
    while(q--) {
        int x;
        cin >> x;
        
        // 使用哈希表存储元素及其下标
        unordered_map<int, int> mp;
        bool found = false;
        
        // 遍历数组
        for(int i = 0; i < n; i++) {
            // 如果 x 能被 a[i] 整除
            if(x % a[i] == 0) {
                int target = x / a[i];
                // 如果之前已经出现过 target
                if(mp.count(target)) {
                    cout << mp[target] + 1 << " " << i + 1 << endl;
                    found = true;
                    break;
                }
                // 将当前元素存入哈希表
                mp[a[i]] = i;
            }
        }
        
        if(!found) {
            cout << "-1 -1" << endl;
        }
    }
    
    return 0;
}
相关推荐
2601_954526754 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
叩码以求索5 小时前
浅谈:算法萌新如何高效刷题应对面试(一)
算法·面试·职场和发展
c238566 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法
aaaameliaaa7 小时前
指针之总结
c语言·笔记·算法
宵时待雨7 小时前
优选算法专题9:哈希表
数据结构·算法·散列表
txzrxz7 小时前
最短路问题——Dijkstra 算法
数据结构·c++·算法·最短路·优先队列
gwf2168 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
noipp8 小时前
推荐题目:洛谷 P6231 [JSOI2013] 公交系统
c语言·数据结构·c++·算法·游戏·洛谷·luogu
c238568 小时前
C/C++每日一练6
c语言·c++·算法
AI小码9 小时前
把动作「画」给视频世界模型,跨本体双向推演,李飞飞参与
大数据·人工智能·算法·ai·大模型·音视频·编程