社区讨论
刚学OI的蒟蒻求调
P1001A+B Problem参与者 5已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1m2n3
- 此快照首次捕获于
- 2025/11/03 19:14 4 个月前
- 此快照最后确认于
- 2025/11/03 20:35 4 个月前
RE了,在本地测都是对的,整数负数都是正常运行。
CPP#include<bits/stdc++.h>
using namespace std;
string a,b,dist[10];
bool vis[10];
struct node{
int v;
string w;
};
vector<node> vct[10];
queue<int> q;
string GJ_jia(string a,string b);
bool GJ_bj(string a,string b){
if(a=="INT_MAX")return 1;
if(b=="INT_MAX")return 0;
int la=a.length(),lb=b.length();
if(la!=lb)return la>lb;
for(int i=0;i<la;i++){
if(a[i]-'0'!=b[i]-'0')return (a[i]-'0')>(b[i]-'0');
}
return 0;
}
string GJ_jian(string a,string b){
string Ans="\0";
if(a[0]=='-'&&b[0]!='-'){
a.erase(0,1);
if(GJ_bj(a,b))Ans="-";
}else if(b[0]=='-'&&a[0]!='-'){
b.erase(0,1);
if(GJ_bj(b,a))Ans="-";
}else if(a[0]=='-'&&b[0]=='-'){
a.erase(0,1);
b.erase(0,1);
string ANS="-"+GJ_jia(a,b);
return ANS;
}
if(GJ_bj(b,a))swap(a,b);
int c[1005]={0},d[1005]={0},ans[1005]={0};
int la=a.length(),lb=b.length(),lans=max(a.length(),b.length());
for(int i=0;i<la;i++)c[i+1]=a[la-i-1]-'0';
for(int i=0;i<lb;i++)d[i+1]=b[lb-i-1]-'0';
for(int i=1;i<=max(la,lb);i++){
if(c[i]<d[i]){
c[i+1]--;
c[i]+=10;
}
ans[i]=c[i]-d[i];
}
while(lans>1&&ans[lans]==0)lans--;
for(int i=lans;i>=1;i--){
char ansi=ans[i]+'0';
Ans=Ans+ansi;
}
return Ans;
}
string GJ_jia(string a,string b){
if(a[0]=='-'||b[0]=='-')return GJ_jian(a,b);
int c[1005]={0},d[1005]={0},ans[1005]={0};
int la=a.length(),lb=b.length(),lans=max(a.length(),b.length())+1;
for(int i=0;i<la;i++)c[i+1]=a[la-i-1]-'0';
for(int i=0;i<lb;i++)d[i+1]=b[lb-i-1]-'0';
for(int i=1;i<=max(la,lb);i++){
ans[i]+=c[i]+d[i];
ans[i+1]=ans[i]/10;
ans[i]%=10;
}
if(ans[lans]==0)lans--;
string Ans="\0";
for(int i=lans;i>=1;i--){
char ansi=ans[i]+'0';
Ans=Ans+ansi;
}
return Ans;
}
int main(){
cin>>a>>b;
vct[1].push_back({2,GJ_jia(a,b)});
for(int i=1;i<=10;i++){
dist[i]="INT_MAX";
}
dist[1]="0";
vis[1]=1;
q.push(1);
while(q.size()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=0;i<vct[u].size();i++){
int v=vct[u][i].v;
string w=vct[u][i].w;
if(!GJ_bj(GJ_jia(dist[u],w),dist[v])){
dist[v]=GJ_jia(dist[u],w);
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
}
cout<<dist[2];
return 0;
}
回复
共 12 条回复,欢迎继续交流。
正在加载回复...