CVer&Elec 2021-04-08 19:39 采纳率: 0%
浏览 32

这道题总是tle,求大佬帮忙修改代码

hwf有一套卡组,一共有 n 张不同的卡片,编号从 1 到 n,每张卡片都是一只效果怪兽。

编号为 i 的卡片的效果是:当编号 ai 的卡片在场上时,可以把手中的这张卡片特殊召唤到场上。

现在有 m 次互相独立的询问,对于每次询问:

hwf会从卡组中抽取 5 张卡片作为手卡。

在每次询问的开始,他可以选择手中的某一张卡片无条件召唤到场上,其他的手卡只能由卡片的效果特殊召唤上场。

每次询问开始时,场上没有卡片。

求他每次最多能召唤出多少张卡片?

输入数据
第一行为一个整数n,代表卡组中卡的数量(5≤n≤60)。
第二行有n个整数a1,a2...an,代表第i张怪兽可以在怪兽ai在场时特殊召唤到场上。(1≤ai≤n)。
第三行为一个整数m,代表询问次数(1≤m≤100)。
接下来每行有五个整数,b1,b2,b3,b4,b5(1≤bi≤n)代表手中的怪兽卡的编号。

输出数据
一共m 行
每行输出一个整数,代表每次询问中最多召唤出的怪兽数量。

样例输入
5
1 1 1 1 1
1
1 2 3 4 5
样例输出
5

#include <iostream>
#include<string.h>
//#include<bits/stdc++.h>
#include <algorithm>
using namespace std;
#define max(a,b) a>b?a:b
bool panduan (int a[],int b)
{
  for(int i=0;i<5;i++)
  {
      if(a[i]==b)
    {
            return true;}
  }
  return false;
  
    
}
/*bool cv(int a[],int b[],int c)
{
    for(int i=0;i<5;i++)
    
}*/
int main(){
    int n, m;
    int y[5];
    int a[100], b[5], call[100] = {0};
    bool choose[100] = {0};
    cin >> n;
    for( int i = 1; i <= n; i++ )//
        cin>> a[i];
    cin >> m;
    for( int i = 0; i < m; i++ ){
        //memset(choose, false, 100);
       // memset(call, 0, 100);
        for(int j = 0; j < 5; j++){
            cin >> b[j];
            y[j]=0;
           // choose[b[j]] = true;    
        }
        int max=1;
        for(int j = 0; j < 5; j++){
            int temp = b[j];
          //  memset(y,0,5);
            
            int s=0;
            while(panduan(b,a[temp]))
            {   int flag=0;
               for(int k=0;k<5;k++)
               {
                   if(a[b[k]]==a[temp])
                   {
                       if(b[k]==a[temp])
                       {
                           flag=1;
                       }
                
                   s++;}
               }
               if(a[temp]==temp||flag==1)
               {
                   //s++;
                   break;
               }
                s++;
                temp=a[temp];
                  
             
            }
            if(max<s)
            max=s;           
            
        }
        
        cout << max << endl;
    }
    return 0;
} 
  • 写回答

3条回答 默认 最新

  • SoftwareTeacher 《编程之美》作者 2021-04-08 23:30
    关注

    tle 的意思是?

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?