5 条题解
-
2
太难了,这一看就是一道单源最短路径问题,考虑SPFA,同时还要考虑过大的数字,显然需要用到高精度。
#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 add_(string a,string b); bool compare(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 delete(string a,string b){ string Ans="\0"; if(a[0]=='-'&&b[0]!='-'){ a.erase(0,1); if(compare(a,b))Ans="-"; }else if(b[0]=='-'&&a[0]!='-'){ b.erase(0,1); if(compare(b,a))Ans="-"; }else if(a[0]=='-'&&b[0]=='-'){ a.erase(0,1); b.erase(0,1); string ANS="-"+add_(a,b); return ANS; } if(compare(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 add_(string a,string b){ if(a[0]=='-'||b[0]=='-')return delete(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,add_(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(!compare(add_(dist[u],w),dist[v])){ dist[v]=add_(dist[u],w); if(!vis[v]){ vis[v]=1; q.push(v); } } } } cout<<dist[2]; return 0; }
信息
- ID
- 19
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 29
- 已通过
- 24
- 上传者