Cod sursa(job #791367)

Utilizator idainetJohn Doe idainet Data 23 septembrie 2012 22:05:30
Problema Cifra Scor 60
Compilator cpp Status done
Runda asem-info Marime 1.71 kb
//
//  main.cpp
//  a1
//
//  Created by abc on 9/20/12.
//  Copyright (c) 2012 abc. All rights reserved.
//

# include <iostream>
# include <cstdio>
# include <cstdlib>
# include <iomanip>
# include <cmath>
# include <map>
# include <vector>

using namespace std;

# define ISDIGIT(a) ('0' <= a  && a <= '9')
# define TODIGIT(a) (a - '0')

typedef long long LONG;

void init()
{
    freopen("cifra.in", "r", stdin);
    freopen("cifra.out", "w", stdout);
}

int read_long()
{
    char ch = getchar(), a[110], N = 0;
    while(!ISDIGIT(ch)) ch = getchar();
    do {
        a[N++] = ch;
        ch = getchar();
    } while(__builtin_expect(ISDIGIT(ch), 1));

    if (N == 1) return TODIGIT(a[0]);
    else {
        return (TODIGIT(a[N-2])*10 + TODIGIT(a[N-1]));
    }
}
 

int read_long_2()
{
    string a, b;
    cin >> a;
    if (a.size() > 2)
    {
        b += a[a.size()-2];
        b += a[a.size()-1];
    }
    else {
        b = a;
    }
    
    int ans;
    sscanf(b.c_str(), "%d", &ans);
    
    return ans;
}

int ans(int N)
{
    static const int magik[10][5] =
    {
        {1, 0, 0, 0, 0},
        {1, 1, 0, 0, 0},
        {4, 2, 4, 8, 6},
        {4, 3, 9, 7, 1},
        {2, 4, 6, 0, 0},
        {1, 5, 0, 0, 0},
        {1, 6, 0, 0, 0},
        {4, 7, 9, 3, 1},
        {4, 8, 4, 2, 6},
        {2, 9, 1, 0, 0}
    };
    
    int v = N%10, grad = (N-1)%magik[v][0] +1;
    return magik[v][grad];
}

int main(int argc, const char * argv[])
{
    init();
    
    vector<int> vec(101, 0);
    for(int i=1; i<vec.size(); ++i)
    {
        vec[i] = (vec[i-1] + ans(i))%10;
    }
    
    LONG T; cin >> T;
    for(int i=0; i<T; ++i)
    {
        int t = read_long();
        cout << vec[(t-1)%100 +1] << endl;
    }
    return 0;
}