救救孩子吧
查看原帖
救救孩子吧
633466
LiaoYF1楼主2022/7/3 20:25

全WA了,一片红,手写结构体做的。 调了一晚上。

#include <bits/stdc++.h>
using namespace std;
struct bigint {
	int len = 1;
	int num[100] = {0};
	bigint &operator=(long long t) {
		int i=0;
		while(t) {
			num[i++]=t%10;
			t/=10;
		}
		len=i;
		return *this;
	}
	int operator[](int i) const {
		return num[i];
	}
	bigint &operator=(string t) {
		len = t.length();
		for (int i = 0; i < (int)t.length(); i++) {
			num[i] = t[len - i - 1] - '0';
			// cout<<1;
		}
		return *this;
	}
	void print() {
		for (int i = len - 1; i >= 0; i--) cout << num[i];
	}
	bool operator==(const bigint t) const {
		if (len != t.len) return 0;
		for (int i = 0; i < len; i++) {
			if (num[i] != t[i]) {
				return 0;
			}
		}
		return 1;
	}
	bool operator<(const bigint t) const{
		if (len != t.len) return len < t.len;
		for (int i = 0; i < len; i++) {
			return num[i] < t[i];
		}
	}
	bool operator>(const bigint t) const{
		if (len != t.len) return len > t.len;
		for (int i = 0; i < len; i++) {
			return num[i] > t[i];
		}
	}
	bigint operator*(const bigint &b) {
		int len3 = len + b.len;
		bigint c;
		c.len = len3;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < b.len; j++) {
				c.num[i + j] += num[i] * b[j];
			}
		}
		// c.print();
		for (int i = 0; i < len3; i++) {
			c.num[i + 1] += c.num[i] / 10;
			c.num[i] = c.num[i] % 10;
		}
		while (1) {
			if (c[len3 - 1] || len3 == 1) break;
			len3--;
		}
		c.len = len3;
		return c;
	}
	bigint operator+(const bigint &b) {
		bigint c;
		int len3=max(len,b.len);
		int jin = 0;
		for (int i = 0; i <= len3 - 1; i++) {
			c.num[i] = num[i] + b[i] + jin;
			if (c[i] > 9) {
				c.num[i + 1] += c.num[i] - 9;
				c.num[i] -= 10;
				jin = 1;
			} else {
				jin = 0;
			}
		}
		c.len=len3;
		return c;
	}
	bigint operator-(const bigint &b) {
		bigint c;
		int len3 = max(len,b.len);
		int jie = 0;
		for (int i = 0; i < len3; i++) {
			c.num[i] = num[i]-b[i]-jie;
			if(c.num[i] < 0) {
				jie =1;
				c.num[i] += 10;
			} else {
				jie = 0 ;
			}
		}
		while(1) {
			if(c.num[len3-1]!=0||len3==1) {
				break;
			}
			len3--;
		}
		c.len=len3;
		return c;
	}
	bigint operator+(const int &b) {
		bigint x;
		x=b;
		return *this+x;
	}
	bigint operator-(const int &b) {
		bigint x;
		x=b;
		return *this-x;
	}
	bigint operator*(const int &b) {
		bigint x;
		x=b;
		return *this*x;
	}
};
bigint f[45][45];
int s[45];
int n,k;
string s1;
bigint js(int x,int y){
    bigint sum;int t=1;
    sum=0;
    for(int i=y;i>=x;i--){
    	
        sum=sum+s[i]*t;
        t*=10;
    }
    return sum;
}
int main(){
    cin>>n>>k>>s1;
    for(int i=0;i<s1.length();i++){
        s[i+1]=s1[i]-'0';
    }
    //cout<<s[4]<<endl;
    for(int i=1;i<=n;i++){
        f[0][i]=js(1,i);
        //cout<<endl;
    }
    for(int i=1;i<=k;i++){
        for(int j=1;j<=n;j++){
            for(int m=j;m>=i;m--){
            	//(f[i-1][l-1]*js(l,j)).print();
                //cout<<js(l,j).len<<" ";
                //cout<<l<<" "<<j<<endl;
                //cout<<" ";
                //cout<<i<<" "<<j<<endl;
                
                
                f[i][j]=max(f[i][j],f[i-1][m-1]*js(m,j));
                //f[i][j].print();
                //cout<<"\n";
            }
        }
    }
    f[k][n].print();
    
    return 0;
}
2022/7/3 20:25
加载中...