题目描述
blablabla
样例
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
// #define int long long
using namespace std;
typedef pair<int, int > PII;
PII man[1010];
// A > B
bool cmp(vector<int> &A, vector<int> &B){
if(A.size() != B.size()) return A.size() > B.size();
for(int i = A.size() - 1; i >= 0; i--){
if(A[i] != B[i]) return A[i] > B[i];
}
return false;
}
vector<int> mul(vector<int> &A, int b){
int t = 0;
vector<int> C;
for(int i = 0; i < A.size(); i++){
t += A[i]*b;
C.push_back(t%10);
t/=10;
}
while(t){
C.push_back(t%10);
t/=10;
}
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
vector<int> div(vector<int> &A, int b){
int t = 0;
vector<int> C;
for(int i = A.size()-1; i >= 0; i--){
t = t*10 + A[i];
C.push_back(t/b);
t %= b;
}
reverse(C.begin(), C.end());
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
signed main(){
int n;
cin >> n;
for(int i = 1; i <= n+1; i++){
int l, r;
cin >> l >> r;
man[i] = {l*r, l};
}
vector<int> sum, res;
sum.push_back(1);
// int res = -1e9;
sort(man+2, man+2+n);
if(n == 1){
cout << man[1].second / (man[2].first/man[2].second);
return 0;
}
for(int i = 1; i <= n+1; i++){
int l = man[i].second;
int r = man[i].first / man[i].second;
//res = max(res, sum/r);
auto tmp = div(sum, r);
if( cmp(tmp, res) )
{
res.clear();
for(int i = 0; i < tmp.size(); i++){
res.push_back(tmp[i]);
}
}
sum = mul(sum, l);
// cout << l << " " << r << "|" << sum << "|" << res << "\n";
}
for(int i = res.size() - 1; i >= 0; i--){
cout << res[i];
}
// vector<int> tmp;
// tmp.push_back(1);
// auto C = div(tmp, 10);
// for(int i = C.size() - 1; i >= 0 ; i--){
// cout << C[i];
// }
return 0;
}
算法1
(暴力枚举) O(n2)
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) O(n2)
blablabla
时间复杂度
参考文献
C++ 代码
blablabla