Cod sursa(job #1742522)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 16 august 2016 16:03:03
Problema Sarpe Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <vector>
#include <map>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;

ifstream cin("sarpe.in");
ofstream cout("sarpe.out");

const int MAXN = 4000;

char s[1 + MAXN];
int v[1 + MAXN], v0[1 + MAXN];

void Square(int a[]) {
    for (int i = 1; i <= a[0]; i++) {
        int j, c;
        for (c = 0, j = 1; j <= a[0] || c; j++, c /= 10)
            v0[i + j - 1] = (c += v0[i + j - 1] + a[i] * a[j]) % 10;
        if (i + j - 2 > v0[0])
            v0[0] = i + j - 2;
    }
}

void Subtract(int a[], int b[]) {
    for (int c = 0, i = 1; i <= a[0]; i++)
        a[i] += (c = (a[i] -= b[i] + c) < 0) * 10;
    while (a[0] > 1 && a[a[0]] == 0)
        a[0]--;
}

void Add(int a[], int k) {
    int i, c = 0;
    a[1] += k;
    c = a[1] / 10;
    a[1] %= 10;
    for (i = 2; i <= a[0] || c; i++, c /= 10)
        a[i] = (c += a[i]) % 10;
    a[0] = i - 1;
}

void Multiply(int a[], int k) {
    int i, c = 0;
    for (int i = 1; i <= a[i] || c; i++, c /= 10)
        a[i] = (c += a[i] * k) % 10;
    a[0] = i - 1;
}
int main() {
    cin >> s;
    int n = strlen(s);
    for (int i = n - 1; i >= 0; i--) {
        v[0]++;
        v[v[0]] = s[i] - '0';
    }
    if (v[0] == 1 && v[1] == 1) {
        cout << "2\n";
        return 0;
    }
    else {
        Square(v);
        Subtract(v0, v);
        Add(v0, 2);
        Multiply(v0, 2);
        for (int i = v0[0]; i > 0; i--)
            cout << v0[i];
        cout << "\n";
    }
    return 0;
}