1030. 完美數列(25):要考慮全面
第一次非AC程式碼
邏輯不夠嚴謹
第二次非AC程式碼#include<iostream> #include<string> #include<algorithm> using namespace std; #define Max 100000 long long arr[Max]; int main() { long long N, P; cin>>N>>P; int i; for( i=0; i<N; i++ ) { cin>>arr[i]; } sort(arr,arr+N); long long min=arr[0]; for( i=N-1; i>=0; i-- ) { if( arr[i]<=min*P ){ break; } } cout<<i+1<<endl; return 0; }
演算法不夠高效
#include<iostream> #include<string> #include<algorithm> using namespace std; #define Max 100000 long long arr[Max]; int main() { long long N, P; cin>>N>>P; int i; for( i=0; i<N; i++ ) { cin>>arr[i]; } sort(arr,arr+N); long long min=arr[0]; for( i=N-1; i>=0; i-- ) { if( arr[i]<=min*P ){ break; } } cout<<i+1<<endl; return 0; }
執行結果如下圖
AC程式碼:
原來的邏輯是 每次開始查詢的範圍都是從最大的元素開始#include<iostream> #include<string> #include<algorithm> using namespace std; #define Max 100000 long long arr[Max+1]; int main() { long long N, P; int ans=1; cin>>N>>P; int i, j; for( i=0; i<N; i++ ) { cin>>arr[i]; } sort(arr,arr+N); for( j=0; j<N; j++ ) for( i=j+ans; i<N; i++ ) { if( arr[i]<=arr[j]*P ){ if( i-j+1>ans ) { ans=i-j+1; } } else break; } cout<<ans<<endl; return 0; }
後來的邏輯是 每次開始查詢的範圍隨著ans的值增大不斷縮減
換言之 就是我經過一次遍歷後 已經確定了較大的ans值 在下一次遍歷的時候我就從 j+ans 值位置開始
類似於KMP的一步跨越儘可能多的元素個數
相關推薦
1030. 完美數列(25):要考慮全面
第一次非AC程式碼 邏輯不夠嚴謹 #include<iostream> #include<string> #include<algorithm> using namespace std; #define Max 100000 long
1030. 完美數列(25)
升序 blog 排列 最大 stdio.h 個數 整數 組成 clu 給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。 現在給定參數p和一些正整數,請你從中選擇盡可能多的數構成一個完美數列。 輸入
1030 完美數列(25)(25 point(s))
給定一個正整數數列,和正整數,設這個數列中的最大值是,最小值是,如果,則稱這個數列是完美數列。 現在給定引數和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩個正整數N和p,其中()是輸入的正整數的個數,()是給定的引數。第二行給出個正整數,每個數
PAT乙級—1030. 完美數列(25)-native
給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。 現在給定引數p和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩個正整數N和p,其中N(&l
1030. 完美數列(25)(C++)
給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。現在給定引數p和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。輸入格式:輸入第一行給出兩個正整數N和p,其中N(<= 105)是輸入的正
[PAT乙級]1030. 完美數列(25)
1030. 完美數列(25) 原題連結 給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。 現在給定引數p和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式:
乙級 PAT 1030. 完美數列(25)
給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。現在給定引數p和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。輸入格式:輸入第一行給出兩個正整數N和p,其中N(<= 105)是輸入的正
PAT-乙-1030 1030 完美數列 (25 分)
程式碼 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int N; lon
1030 完美數列 (25 分
10的9次方 long型,注意裡面迴圈的終止條件 並且注意邊界條件,M<=mp #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int main
1030 完美數列(25 分)//////
給定一個正整數數列,和正整數 p,設這個數列中的最大值是 M,最小值是 m,如果 M≤mp,則稱這個數列是完美數列。 現在給定引數 p 和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩個正整數 N 和 p,其中 N(≤105)
PAT——1030. 完美數列
for .cn 可能 i+1 array scan sta level basic 給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。 現在給定參數p和一些正整數,請你從中選擇盡可能多的數構成一個完
PAT乙級 1030 完美數列
給定一個正整數數列,和正整數 p,設這個數列中的最大值是 M,最小值是 m,如果 M≤mp,則稱這個數列是完美數列。現在給定引數 p 和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩個正整數 N 和 p,其中 N(≤105)是輸入的正整數的個數,
PAT (Basic Level) Practice 1030 完美數列
乙級1030 實在想不出來該怎麼在不暴力的情況下寫出這題……無奈百度,感謝原作者的思路提供,非常有幫助! PAT 乙級 1030 完美數列(分治策略思考)by csdn-FDProcess 主要是那張gif看懂了就豁然開朗 首先排序(基本) 然後以第一位數為min,再從陣列最後一
1030 完美數列
題目資訊: 給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。 現在給定引數p和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩個正整數N和p,其中N(<=
PAT 乙級 1030 完美數列
分析題目,解題需要如下步驟 分割數列(這裡的分割時任意分割沒有必要連續) 找出分割的數列的兩個最值 判斷是否符合題目條件 若符合條件則和當前已經記錄的最大的符合條件的數列的長度比較,若大於已經記錄的長度則更新最大長度。 若還有未判斷過的數列則重複第一步,
1030 完美數列 Python實現
1030 完美數列(25)(25 分) 給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。 現在給定引數p和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩
完美數列(25)
時間限制 1000 ms 記憶體限制 32768 KB 程式碼長度限制 100 KB 判斷程式 Standard (來自 小小) 題目描述 給定一個正整數數列,和正整數p,設這個數列中
PAT (Basic Level)1030. 完美數列
題目描述: 給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。 現在給定引數p和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩個正整數N和p,其中N
PAT_B_1030 完美數列 (25 分)【測試點4超時】【測試點5報錯】
給定一個正整數數列,和正整數 p,設這個數列中的最大值是 M,最小值是 m,如果 M≤mp,則稱這個數列是完美數列。 現在給定引數 p 和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩個正整數 N 和 p,其中 N(≤105)是輸入的正整數的個
PAT B1030 完美數列 (25 分)
減少 %d ios lang 註意 組成 hit 感覺 color 給定一個正整數數列,和正整數 p,設這個數列中的最大值是 M,最小值是 m,如果 M≤mp,則稱這個數列是完美數列。 現在給定參數 p 和一些正整數,請你從中選擇盡可能多的數構成一個完美數列。 輸入格式: