• ???


    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    const int MAXN = 1e5 + 5;
    
    char _a[MAXN], _b[MAXN], _c[MAXN];
    int a[MAXN], b[MAXN], c[MAXN];
    int sa, sb, sc;
    
    int x, y, z;
    
    int apb[MAXN], sapb;
    int cma[MAXN], scma;
    int cmb[MAXN], scmb;
    int x1, y1, z1;
    int x2, y2, z2;
    int x3, y3, z3;
    
    int tmp[MAXN];
    
    void calcapb() {
        memset(apb, 0, sizeof(apb));
        int b1 = 0;
        for(int i = 0; i < sa; ++i) {
            if(a[i] != 0) {
                b1 = i;
                break;
            }
        }
        int b2 = 0;
        for(int i = 0; i < sb; ++i) {
            if(b[i] != 0) {
                b2 = i;
                break;
            }
        }
        sapb = max(sa - b1, sb - b2);
        int cnt = 0, f = 0;
        for(int i = 0; i < sapb; ++i) {
            apb[i] += a[i + b1] + b[i + b2];
            if(apb[i] >= 10) {
                ++apb[i + 1];
                apb[i] -= 10;
            }
            if(apb[i] == 0 && f == 0)
                cnt++;
            else if(apb[i] != 0)
                f = 1;
        }
        if(apb[sapb] != 0)
            ++sapb;
        if(b2 > b1) {
            x1 = b2 - b1;
            y1 = 0;
            z1 = cnt;
        } else {
            y1 = b1 - b2;
            x1 = 0;
            z1 = cnt;
        }
    }
    
    void calccma() {
        memset(cma, 0, sizeof(cma));
        int b1 = 0;
        for(int i = 0; i < sc; ++i) {
            if(c[i] != 0) {
                b1 = i;
                break;
            }
        }
        int b2 = 0;
        for(int i = 0; i < sa; ++i) {
            if(a[i] != 0) {
                b2 = i;
                break;
            }
        }
    
        scma = max(sc - b1, sa - b2);
        int cnt = 0, f = 0;
        for(int i = 0; i < scma; ++i) {
            cma[i] += c[i + b1] - a[i + b2];
            if(cma[i] < 0) {
                --cma[i + 1];
                cma[i] += 10;
            }
    
            if(cma[i] == 0 && f == 0)
                cnt++;
            else if(cma[i] != 0)
                f = 1;
        }
        if(cma[scma] != 0)
            ++scma;
        if(b2 > b1) {
            z2 = b2 - b1;
            x2 = 0;
            y2 = cnt;
        } else {
            x2 = b1 - b2;
            z2 = 0;
            y2 = cnt;
        }
    }
    
    void calccmb() {
        memset(cmb, 0, sizeof(cmb));
        int b1 = 0;
        for(int i = 0; i < sc; ++i) {
            if(c[i] != 0) {
                b1 = i;
                break;
            }
        }
        int b2 = 0;
        for(int i = 0; i < sb; ++i) {
            if(b[i] != 0) {
                b2 = i;
                break;
            }
        }
    
        scmb = max(sc - b1, sb - b2);
        int cnt = 0, f = 0;
        for(int i = 0; i < scmb; ++i) {
            cmb[i] += c[i + b1] - b[i + b2];
            if(cmb[i] < 0) {
                --cmb[i + 1];
                cmb[i] += 10;
            }
            if(cmb[i] == 0 && f == 0)
                cnt++;
            else if(cmb[i] != 0)
                f = 1;
        }
    
        if(cmb[scmb] != 0)
            ++scmb;
        if(b2 > b1) {
            z3 = b2 - b1;
            y3 = 0;
            x3 = cnt;
        } else {
            y3 = b1 - b2;
            z3 = 0;
            x3 = cnt;
        }
    }
    
    
    bool solveapb() {
        int b1 = 0;
        for(int i = 0; i < sapb; ++i) {
            if(apb[i] != 0) {
                b1 = i;
                break;
            }
        }
        int b2 = 0;
        for(int i = 0; i < sc; ++i) {
            if(c[i] != 0) {
                b2 = i;
                break;
            }
        }
        if(sapb - b1 != sc - b2)
            return false;
        for(int i = 0; i < sapb - b1; ++i) {
            if(apb[i + b1] != c[i + b2])
                return false;
        }
        if(b2 > b1) {
            x1 += b2 - b1;
            y1 += b2 - b1;
            z1 += 0;
        } else {
            z1 += b2 - b1;
        }
        return true;
    }
    
    bool solvecma() {
        int b1 = 0;
        for(int i = 0; i < scma; ++i) {
            if(cma[i] != 0) {
                b1 = i;
                break;
            }
        }
        int b2 = 0;
        for(int i = 0; i < sb; ++i) {
            if(b[i] != 0) {
                b2 = i;
                break;
            }
        }
        if(scma - b1 != sb - b2)
            return false;
        for(int i = 0; i < scma - b1; ++i) {
            if(cma[i + b1] != b[i + b2])
                return false;
        }
    
        if(b2 > b1) {
            x2 += b2 - b1;
            z2 += b2 - b1;
        } else {
            y2 += b1 - b2;
        }
        return true;
    }
    
    bool solvecmb() {
        int b1 = 0;
        for(int i = 0; i < scmb; ++i) {
            if(cmb[i] != 0) {
                b1 = i;
                break;
            }
        }
        puts("C-B=");
        for(int i = scmb - 1; i >= 0; --i) {
            printf("%d", cmb[i]);
        }
        puts("");
        int b2 = 0;
        for(int i = 0; i < sa; ++i) {
            if(a[i] != 0) {
                b2 = i;
                break;
            }
        }
        if(scmb - b1 != sa - b2)
            return false;
        for(int i = 0; i < scmb - b1; ++i) {
            if(cmb[i + b1] != a[i + b2])
                return false;
        }
    
        cout << "b2=" << b2 << " b1=" << b1 << endl;
        if(b2 > b1) {
            y3 += b2 - b1;
            z3 += b2 - b1;
        } else {
            x3 += b1 - b2;
        }
        return true;
    }
    
    int main() {
    #ifdef Yinku
        freopen("Yinku.in", "r", stdin);
    #endif // Yinku
        int T;
        while(~scanf("%d", &T)) {
            while(T--) {
                scanf("%s%s%s", _a, _b, _c);
    //            printf("A=
      %s
    ", _a);
    //            printf("B=
      %s
    ", _b);
    //            printf("C=
      %s
    ", _c);
                sa = strlen(_a), sb = strlen(_b), sc = strlen(_c);
                reverse(_a, _a + sa);
                reverse(_b, _b + sb);
                reverse(_c, _c + sc);
                memset(a, 0, sizeof(a));
                memset(b, 0, sizeof(b));
                memset(c, 0, sizeof(c));
                for(int i = 0; i < sa; ++i)
                    a[i] = _a[i] - '0';
                for(int i = 0; i < sb; ++i)
                    b[i] = _b[i] - '0';
                for(int i = 0; i < sc; ++i)
                    c[i] = _c[i] - '0';
    
    //            puts("A2=");
    //            for(int i = 0; i < sa; ++i) {
    //                printf("%d", a[i]);
    //            }
    //            puts("");
    
                calcapb();
    //            puts("A+B=");
    //            cout << "len=" << sapb << endl;
    //            for(int i = sapb - 1; i >= 0; --i) {
    //                printf("%d", apb[i]);
    //            }
    //            puts("");
    
                if(solveapb()) {
                    printf("1:%d %d %d
    ", x1, y1, z1);
                    continue;
                }
    
                calccma();
    
                /*for(int i=scma-1;i>=0;--i){
                    printf("%d",cma[i]);
                }
                puts("");*/
    
                if(cma[scma] >= 0 && solvecma()) {
                    printf("2:%d %d %d
    ", x2, y2, z2);
                    continue;
                }
    
                calccmb();
    
                /*for(int i=scma-1;i>=0;--i){
                    printf("%d",cma[i]);
                }
                puts("");*/
    
                if(cmb[scmb] >= 0 && solvecmb()) {
                    printf("3:%d %d %d
    ", x3, y3, z3);
                    continue;
                }
    
                puts("-1");
                continue;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    CSS进阶-深入理解vertical-align和line-height的关系
    困难的串【转】
    【转】常用 Git 命令清单
    程序员常用等宽字体
    IE的特有属性hasLayout和BFC
    css深入理解之行高line-height
    mysql 索引优化,不走索引的原因
    php解决高并发(文件锁)
    mysql索引详解
    http错误代码
  • 原文地址:https://www.cnblogs.com/Yinku/p/11341207.html
Copyright © 2020-2023  润新知