Cod sursa(job #2138851)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 21 februarie 2018 22:01:37
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
FILE *fin, *fout;
vector <int> nr;
vector <int> inm(int k, vector <int> nr){
    vector <int> s;
    vector <int> :: iterator it;
    int val, transport;
    transport=0;
    for(it=nr.begin();it!=nr.end();it++){
        val=(*it)*k+transport;
        transport=val/10;
        val%=10;
        s.push_back(val);
    }
    if(transport)
        s.push_back(transport);
    return s;
}
vector <int> adun(vector <int> rez, vector <int> s,int pas){
    vector <int> sol;
    vector <int> :: iterator it1;
    vector <int> :: iterator it2;
    int transport,val;
    transport=0;
    for(it1=rez.begin();it1!=rez.begin()+pas;it1++)
        sol.push_back(*it1);
    for(it1=rez.begin()+pas,it2=s.begin(); it1!=rez.end() && it2!=s.end(); it1++, it2++){
        val=(*it1)+(*it2)+transport;
        transport=val/10;
        val%=10;
        sol.push_back(val);
    }
    while(it1!=rez.end()){
        val=(*it1)+transport;
        transport=val/10;
        val%=10;
        sol.push_back(val);
        it1++;
    }
    while(it2!=s.end()){
        val=(*it2)+transport;
        transport=val/10;
        val%=10;
        sol.push_back(val);
        it2++;
    }
    if(transport)
        sol.push_back(transport);
    return sol;
}
vector <int> solve(int x){
    vector <int> rez;
    int pas,k;
    pas=0;
    while(x){
        k=x%10;
        rez=adun(rez,inm(k,nr),pas);
        pas++;
        x/=10;
    }
    return rez;
}
void afis(){
    while(!nr.empty()){
        fprintf(fout,"%d",nr.back());
        nr.pop_back();
    }
    fprintf(fout,"\n");
}
int main()
{
    fin=fopen("patrate2.in","r");
    fout=fopen("patrate2.out","w");
    int n,i;
    fscanf(fin,"%d",&n);
    nr.push_back(1);
    for(i=2;i<=n;i++)
        nr=solve(i);
    n=n*n;
    for(i=1;i<=n;i++)
        nr=solve(2);
    afis();
    fclose(fin);
    fclose(fout);
    return 0;
}