rt。
这道题 本机(win 7)运行正常,但提交就RE,并且弹出了 Runtime Error. Received signal 6: Aborted / IOT trap. 这个神奇的提示信息
代码:
// Problem: P1018 [NOIP2000 提高组] 乘积最大
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1018
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
#define F(i,j,k) for (signed i=signed(j);i<=signed(k);i++)
#define endl '\n'
//#define int long long
struct bigint{
vector<int> v;
bigint(){v.push_back(0);}
bigint(vector<int> _v){v=_v;}
bigint(int x){v.push_back(0);while(x) v.push_back(x%10),x/=10;}
void print(){
for(int i=v.size()-1;i>=1;i--) cout<<v[i];
if(v.size()==1) cout<<0;
}
bigint operator +(bigint _b){
vector<int> b=_b.v;
if(v.size()<b.size()) swap(v,b);
vector<int> ans=v;
int x=0;
F(i,1,b.size()-1) {
ans[i]+=b[i]+x;
x=ans[i]/10;
ans[i]%=10;
}
if(x) ans.push_back(x);
return ans;
}
bigint operator *(bigint _b){
vector<int> b=_b.v;
vector<int> ans(v.size()+b.size());
F(i,1,v.size()-1) F(j,1,b.size()-1) ans[i+j-1]+=v[i]*b[j];
F(i,1,ans.size()-2) ans[i+1]+=ans[i]/10,ans[i]%=10;
while(ans.back()==0) ans.pop_back();
if(ans.size()==0) ans.push_back(0);
return ans;
}
};
bool operator <(bigint a,bigint b){
if(a.v.size()!=b.v.size()) return a.v.size()<b.v.size();
for(int i=a.v.size();i>=1;i--) if(a.v[i]!=b.v[i]) return a.v[i]<b.v[i];
return 0;
}
bigint stolll(string s){
bigint a=0;
F(i,0,s.size()-1) a=a*10+(int)(s[i]-'0');
return a;
}
int n,k;
string s;
bigint dp[45][45];
main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>k>>s;
F(i,1,n) dp[i][0]=stolll(s.substr(0,i));
F(i,1,n) F(j,1,i-1) F(o,j,i-1)
dp[i][j]=max(dp[i][j],dp[o][j-1]*stolll(s.substr(o,i-o)));
dp[n][k].print();
return 0;
}