社区讨论
求大佬调试
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 条回复,欢迎继续交流。
正在加载回复...