我好像卡住了luogu测评机了
  • 板块灌水区
  • 楼主perry_lin2333
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/7/21 15:46
  • 上次更新2023/10/27 19:05:44
查看原帖
我好像卡住了luogu测评机了
604255
perry_lin2333楼主2022/7/21 15:46

想看转圈圈的看这个测评记录 555怎么办我不小心卡了测评机QAQ 代码在这

#include<iostream>
#include<algorithm>
#include<cmath>
using std::string;
string num1,num2,ans="";
bool comparasion(std::string a,std::string b){//a>=b true ; a<b false   hint:no bug
    int size_sub = abs(a.size()-b.size());
	if(a.size()>b.size()) for(int i=0;i<size_sub;i++) b+="0";
	else if(a.size()<b.size()) for(int i=0;i<size_sub;i++) a+="0";
	for(int i=a.size()-1;i>=0;i--){
		if((a[i]-'0')==b[i]-'0') continue;
		else return (a[i]-'0')>=(b[i]-'0');
	}
	return true;
	
}
string super_large_substract(string a,string b){//already up side down   hint:no bug
	short int mid = 0;
	short int far_mid = 0;
	for(int i=0;i<b.size();i++){
		mid = (a[i]-'0')-(b[i]-'0');
		if(mid<0){
			int flag = 0;
		    do{
			    flag++;
			    far_mid = (a[i+flag]-'0');
		    }while(a[i+flag]=='0');
		    a[i+flag] = (a[i+flag]-'0'-1)+'0';
		    for(int j=1;j<flag;j++) a[i+j]='9';
		    mid+=10;
		}
		a[i] = mid+'0';
	}
	return a;
}
int main(){//end is the highest
	std::cin>>num1>>num2;
	for(int i=0;i<num1.size()/2;i++) std::swap(num1[i],num1[num1.size()-i-1]);
	for(int i=0;i<num2.size()/2;i++) std::swap(num2[i],num2[num2.size()-i-1]);
	for(int i=0;i<num1.size();i++) ans+="0";
	string mid;
	for(int i=num1.size()-num2.size();i>=0;i--){
		mid = "";
		for(int j=0;j<i;j++) mid+="0";
		while(comparasion(num1,mid+num2)){
			num1 = super_large_substract(num1,mid+num2);
			ans[i] = (ans[i]-'0'+1)+'0';
		}
	}
	bool flag = true;
	for(int i=ans.size()-1;i>=0;i--){
		if(flag){
			if(ans[i]=='0') continue;
			else{
				flag = !flag;
				std::cout<<ans[i];
			}
		}
		else{
			std::cout<<ans[i];
		}
	}
	if(flag) std::cout<<"0";
	std::cout<<std::endl;
	return 0;
}

我该怎么办有人告诉我吗QAQ

2022/7/21 15:46
加载中...