社区讨论

求大佬调试

P3169[CQOI2015] 多项式参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m5qynseu
此快照首次捕获于
2025/01/11 00:17
去年
此快照最后确认于
2025/01/11 14:29
去年
查看原帖
CPP
#include<stdio.h>
#include<string>
#include<vector>
#include<iostream>
std::string n;
int t,m;
std::string Add(std::string a,std::string b){
	short Carry=0,Max=std::max(a.size(),b.size());
	std::string c;
	for(int i=0;i<Max;i++){
		if(i<a.size())Carry=Carry+a[i]-'0';
		if(i<b.size())Carry=Carry+b[i]-'0';
		c=c+std::to_string(Carry%10);
		Carry=Carry/10;
	}
	if(Carry>0)c[Max]=Carry+'0';
	while(c.size()>1&&c[0]=='0')c.erase(0,1);
	std::reverse(c.begin(),c.end());
	return c;
}
std::string Subtract(std::string a,std::string b){
	if(a<b)return Subtract(b,a);
	std::string c;
	int x=0,f=0,i=a.size()-1,j=b.size()-1;
	while(i>=0||j>=0){
		if(i>=0)x=x+a[i--]-'0';
        if(j>=0)x=x-b[j--]-'0';
        if(x<0){
            x=x+10;
            f=-1;
        }
		else f=0;
        c=c+std::to_string(x);
	}
	while(c.size()>1&&c[0]=='0')c.erase(0,1);
	std::reverse(c.begin(),c.end());
	return c;
}
std::string Multiply(std::string a,std::string b){
	short lena=a.size(),lenb=b.size();
	std::string c;
	for(int i=0;i<lena;i++){
		int Carry=0;
		for(int j=0;j<lenb;j++){
			int num=(a[i]-'0')*(b[j]-'0')+(c[i+j]-'0')+Carry;
			c[i+j]=num%10+'0';
			Carry=num/10;
		}
		if(Carry>0)c[i+lenb]=Carry+'0';
	}
	while(c.size()>1&&c[0]=='0')c.erase(0,1);
	std::reverse(c.begin(),c.end());
	return c;
}
/*猜猜为什么用x和y 因为最开始用Vector被私人类型整无语了 魔改函数为了简略就成了这样 Q~Q*/
std::string Mod(std::string x,std::string y){
	std::string temp;
	while(x.size()>=y.size()){
		if(x.size()>y.size()||x.size()==y.size()&&x>=y){
			temp=x.substr(0,y.size());
			int k=y.size();
			while(k<x.size()||temp.size()>y.size()&&temp>y){
				temp=temp+x[k];
				k++;
			}
		}
		int num=0;
		while(temp.size()>=y.size()&&temp.size()>y.size()||temp.size()==y.size()&&temp>=y){
            temp=Subtract(temp,std::to_string((y[0]-'0')*10));
            num++;
        }
        std::string Str=std::to_string(num),p=Multiply(Str,y);
        x=Subtract(x,p);
	}
	return x;
}
std::string A_k(int k){
	if(k==0)return "1";
	std::string a=A_k(k-1),b=Multiply(a,"1234"),c=Add(b,"5678");
	return Mod(c,"3389");
}
std::string C_n_k(std::string n,int k){
	if(k>std::stoi(n))return "0";
	std::string r="1";
	for(int i=1;i<=k;i++){
		r=Multiply(r,std::to_string(std::stoi(n)-i+1));
        r=Mod(r,std::to_string(i));
	}
	return r;
}
std::string B_m(std::string n,int t,int m){
	std::string b_m="0";
    for(int k=0;k<=std::stoi(n);k++){
        std::string a_k=A_k(k);
        for(int i=0;i<=k;i++){
            std::string b=C_n_k(std::to_string(k),i),f="1";
            for(int j=0;j<k-i;j++){
                f=Multiply(f,std::to_string(t));
                if((k-i-j-1)&1){
                    f="-"+f;
                }
            }
            std::string k=Multiply(a_k,b);
            k=Multiply(k,f);
            b_m=Add(b_m,k);
            b_m=Mod(b_m,"3389");
        }
    }
    return b_m;
}
/*熬夜写代码 耗时32分钟写高精 人吐了 QAQ*/
int main(){
	std::cin>>n>>t>>m;
	std::cout<<B_m(n,t,m);
	return 0;
}
自己写的代码 调着调着就炸了 求大佬帮忙看看 QAQ (算了先去睡觉)

回复

0 条回复,欢迎继续交流。

正在加载回复...