数字拼接TLE90

#include<bits/stdc++.h>
using namespace std;
queue<long long> q;
long long a[100];
bool b=0;
bool cmp(long long x, long long y){
  return x<y;
}
void bfs(long long n, long long m){
  while(q.front()%m!=0){
    long long now=q.front();
    q.pop();
    for(long long i=0;i<n;i++){
      if((to_string(now)+to_string(a[i])).size()>=18){
        b=1;
        return;
      }
      
      q.push(now*100+a[i]);
      if(now*100+a[i]%m==0){
        return;
      }
    }
  }
  
}
int main(){
  long long t;
  cin >> t;
  for(long long i=0;i<t;i++){
    long long n, m;
    cin >> n >> m;
    for(long long j=0;j<n;j++){
      cin >> a[j];
    }
    sort(a, a+n, cmp);
    for(long long j=0;j<n;j++){
      q.push(a[j]%m);
    }
    // cout << m;
    bfs(n, m);
    if(b){
      b=0;
      cout << "Are you kidding me ?????" << endl;
    }
    else{
      cout << q.front() << endl;
    }
    while(!q.empty()){
      q.pop();
    }
  }
}

样例1过不去

可以发一下题目吗?

Yes,

鱼大大研究了一种新的+运算,就是把一个整数拼接到另一个整数的后面,他把这种运算叫做
整数拼接运算。

正巧鱼大大参加的学校活动中,就有一个活动的规则是:给出一个数字m,再在箱子中随机摇出n个
数字球,这n个数字互不相同。参与者需要在1秒钟内快速计算出由这n个数字(可多次使用)
拼凑而成的数字,要求这个数满足是数字m的正整数倍且位长不超过18。只要能说出最小的满
足条件的数字,即可获得大量的积分。

鱼大大一看,这不就是为我的整数拼接运算量身定做的活动嘛,都别动,让我来!

现在冰雪聪明的你是鱼大大的竞争对手,一定要在鱼大大之前把大量的积分拿走!

输入格式
多组测试,你要反复参加活动直到把积分拿完!一点也不给鱼大大留!

第一行一个整数 t,表示测试组数(1≤t≤10)

接下来t组数据每组有两行,

第一行两个正整数 n 和 m (2≤n≤10,100≤m≤999)

第二行n个数字,分别为随机摇出的n个号码,号码的范围在10~99之间

输出格式
输出这个倍数,如果无解则输出“Are you kidding me ?????”。

样例
Input 1
    2
    5 806
    22 74 21 48 59
    2 992
    16 56
Output 1
224874
Are you kidding me ?????

你是谁???

呃啊,突然发现一不小心发到常规了,难怪没人回

你的vis呢

@朱思源

咋写

搜过就等于1

在那儿+

搞错了是要把答案的哪一个函数用string

对了不用再void中return是直接q.push(now*100+a[i]);

有一点忘记思路了

@huangfeidong 算了,我帮他吧,我和他是一个班的

  • 需要一个括号

  • 10,不是100
    改完后:

if((now*10+a[i])%m==0){