比赛 东方幻想乡 S1 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 西行寺幽幽子 最终得分 100
用户昵称 王者自由 运行时间 0.587 s
代码语言 C++ 内存使用 0.71 MiB
提交时间 2012-08-07 19:50:26
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int S = 20000 + 10;
char s[S], t[S];
int a[S], b[S], c[S], d[S], e[S];
void pa(int x[]) {
    for(int i=x[0]; i>=0; i--)
        fprintf(stderr, "%d", x[i]);
    fprintf(stderr, "\n");
}
int cmp() {
    int l = max(b[0], d[0]);
    for(int i=l; i>0; i--)
        if(d[i] != b[i]) return d[i] - b[i];
    return 0;
}
void times() {
    for(int i=d[0]; i>0; i--)
        d[i+1] = d[i];
    d[1] = 0;
    d[0]++;
}
void minus() {
    int l = max(b[0], d[0]);
    memset(e, 0, sizeof(e));
    for(int i=1; i<=l; i++) {
        e[i] += d[i] - b[i];
        if(e[i] < 0) {
            e[i+1]--;
            e[i] += 10;
        }
    }
    while(l > 1 && !e[l]) l--;
    e[0] = l;
    memcpy(d, e, sizeof(e));
}
void div() {
    int l = a[0];
    d[0] = 1;
    for(int i=l; i>0; i--) {
        times();
        d[1] = a[i];
        while(cmp() > 0) {
            minus();
            c[i]++;
        }
    }
    while(l > 1 && !c[l]) l--;
    c[0] = l;
}
int main() {
    freopen("spring.in", "r", stdin);
    freopen("spring.out", "w", stdout);
    scanf("%s\n%s\n", s, t);
    a[0] = strlen(s);
    b[0] = strlen(t);
    for(int j=1, i=a[0]; i>0; i--)
        a[j++] = s[i-1]-'0';
    for(int j=1, i=b[0]; i>0; i--)
        b[j++] = t[i-1]-'0';
    div();
    for(int i=c[0]; i>0; i--)
        printf("%d", c[i]);
    printf("\n");
    return 0;
}