2019杭电暑期多校第七场 A:A + B = C(思维)

【题解】

题意:给定a,b,c,找到一个x,y,z使得 a*10^x+b*10^y=c*10^z ,否则输出-1。

思路:我们知道对于A+B=C,要么A+B对于最高位有进一位,那么C的最高位是max(A的最高位,B的最高位)+1;要么A+B没有进位,C的最高位是max(A的最高位,B的最高位)。所以,补零到 a,b,c 长度相等之后, 可能的情况只有四种: b | (c−a),b | (10·c−a),a | (c−b),a | (10·c−b),且商为10的倍数,逐个判断即可。

adds : 首先,a+b=c有两种情况,一种情况就是 c和a、或b、或者a和b,都是一样的位数,比如123+50=173,50+123=173,123+456=579,另一种情况就是c比a、或b、或者a和b、多一位,比如99+3=102,3+99=102,99+30=129。每种情况a和b调换位置(如果位数不同)又有两种,所以总共有四种。

【代码】

#include
using namespace std;
const int maxn=5e5+5,lim=3e5;
int a[maxn],b[maxn],c[maxn],d[maxn];
char A[maxn],B[maxn],C[maxn];
int check(int c[],int lc,int a[],int la,int b[],int lb)
{   //假设a+b*10^x=c,判断b是否整除c-a
    int i;
    for(i=0;i=1
    for(i=0;i

 

你可能感兴趣的:(2019杭电暑期多校第七场 A:A + B = C(思维))