1030. 完美数列(25):要考虑全面
来源:互联网 发布:家庭网络布线交换机 编辑:程序博客网 时间:2024/05/18 01:40
第一次非AC代码
逻辑不够严谨
#include<iostream>#include<string>#include<algorithm>using namespace std;#define Max 100000long 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 100000long 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 100000long 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的一步跨越尽可能多的元素个数
0 0
- 1030. 完美数列(25):要考虑全面
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- 1030. 完美数列(25)
- Linux信号与定时器
- 平台上添加蛇行亿年
- 后端编译less文件
- 内联函数的声明和定义
- IOS描述文件mobileprovision问题
- 1030. 完美数列(25):要考虑全面
- WinHTTP如何处理Cookie
- android_BroadcastReceiver 广播机制
- ImageButton focusable="false"不起作用
- C# 调用C++ dll问题总结一 ——无法找到dll
- Oracle_PL-SQL_JavaSource_13
- 六,存取控制器
- WinHTTP错误信息处理
- C++primer 4.3 C风格字符串--字符数组(strlen、strcpy、strcat)上