PAT乙級 1030 完美數列(執行超時)

2021-10-25 08:50:35 字數 907 閱讀 8886

此題還有乙個測試點沒過

兩個坑:

1,用long防止溢位兩個10的九次方相乘會溢位。

2.執行超時問題要判斷。我這個判斷不行。

要用第二個**,首先將輸入的數字進行sort排序,從小到大。

然後設定i,j記錄符合的陣列位置,count記錄符合要求的中間數字

的多少,初始為0,i從0~n,j從i+count開始,找到符合要求的j

時(m≤mp),計算j-i+1與count的大小,比count大就進行更新。

下一次計算時,j直接從i+count開始,因為必然要滿足統計

的j-i+1要大於count才會記錄,因此這裡很巧妙,避免了還

從j=i+1開始計算。最後輸出count。

注意p是10^9,因此用int儲存不了,直接都用long int比較好。

#includeusing namespace std;

int main()

}printf("%d",max);

} //pat1030v1

#include #include #include using namespace std;

int main()

} printf("%d",count);

return 0;

}參照**二,修改我的

#includeusing namespace std;

int main()

// cnt=0;

// num=a[i]*p;//不改long long這裡會出錯

// int j=i+cnt;

// for(j;a[j]<=num && j<=n-1 && maxmax)

//

}printf("%d",cnt);

}

PAT乙級1030 完美數列

這道題我只用了一次遍歷,遺憾的是最後乙個測試點無法通過,看到有人說最後乙個測試點是大數問題,改了資料型別仍然不行,心累。由於涉及最大最小問題,先對整個陣列排序。從第乙個元素開始標記,對以後的每個元素進行條件判斷,當不滿足題目條件,對標記 1,記錄此時的資料個數,同時遍歷並不需要暫停。這樣遍歷完成後有...

PAT 乙級 1030 完美數列

時間限制 300 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 cao,peng 給定乙個正整數數列,和正整數p,設這個數列中的最大值是m,最小值是m,如果m m p,則稱這個數列是完美數列。現在給定引數p和一些正整數,請你從中選擇盡可能多的數構成乙個...

PAT乙級1030完美數列

題目描述 給定乙個正整數數列,和正整數 p,設這個數列中的最大值是 m,最小值是 m,如果 m mp,則稱這個數列是完美數列。現在給定引數 p 和一些正整數,請你從中選擇盡可能多的數構成乙個完美數列。輸入格式 輸入第一行給出兩個正整數 n 和 p,其中 n 10 5 是輸入的正整數的個數,p 10 ...