Cod sursa(job #1240632)

Utilizator teoionescuIonescu Teodor teoionescu Data 11 octombrie 2014 19:47:51
Problema Sortari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.5 kb
#include<fstream>
using namespace std;
ifstream in("sortari2.in");
ofstream out("sortari2.out");
const int Nmax = 1001;
const int MOD = 999017;
/*int N,v[Nmax],mark[Nmax];
int V[Nmax];
int stepA(){
    int c=0;
    for(int i=1;i<=N;i++) V[i]=v[i];
    for(int i=1;i<=N;i++){
        for(int j=1;j<i;j++) if(V[j]>V[i]) c++;
    }
    return c;
}
int Pos[Nmax];
int stepB(){
    int c=0;
    for(int i=1;i<=N;i++) V[i]=v[i];
    for(int i=1;i<=N;i++) Pos[ V[i] ]=i;
    for(int i=1;i<=N;i++){
        if(V[i]!=i){
            Pos[ V[i] ] = Pos[i];
            swap( V[i] , V[ Pos[i] ] );
            c++;
        }
    }
    return c;
}
int num,p,whom[Nmax];
void back(int i){
    if(i>N){
        //for(int k=1;k<=N;k++) out<<v[k]<<' ';
        if(p==0) if(stepA()!=stepB()) num++;// , out<<"here";
        if(p==1) if(stepA()!=stepB()) whom[ v[1] ]++;// , out<<"here";
        //out<<'\n';
    }
    else{
        for(v[i]=1;v[i]<=N;v[i]++){
            if(!mark[v[i]]){
                mark[v[i]]=1;
                back(i+1);
                mark[v[i]]=0;
            }
        }
    }
}
int find(int x){
    p=0;
    num=0;
    N=x;
    back(1);
    return num;
}
void sh(int x){
    p=1;
    memset(whom,0,sizeof(whom));
    num=0;
    N=x;
    back(1);
    out<< x <<":  ";
    int S=1;
    for(int i=1;i<=N-1;i++) S*=i;
    for(int i=1;i<=N;i++) out<< whom[i] <<' ';
    out<<'\n';
}
int Ans[Nmax];
int Cp[Nmax];
int PA[Nmax],A[Nmax],R[Nmax],P[Nmax];*/
int main(){
    long long N,A=0,P=1,R=0;
    in>>N;
    for(int i=2;i<=N;i++){
        int RR=P-A;   while(RR<0) RR+=MOD;
        R += RR;   while(R>=MOD) R%=MOD;
        P=1LL*P*i;   while(P>=MOD) P%=MOD;
        A=P-(R+RR);   while(A<0) A+=MOD;
    }
    out<< (A % MOD) <<'\n';
    return 0;
}
    /*int nn=9;
    for(int i=1;i<=nn;i++) Ans[i]=find(i);
    for(int i=1;i<=nn;i++) Cp[i]=Ans[i]-i*Ans[i-1];
    for(int i=1;i<=nn;i++) out<<Ans[i]<<'\n'; out<<'\n';
    for(int i=1;i<=nn;i++) out<<Cp[i]<<'\n'; out<<'\n';
    for(int i=1;i<=nn;i++) sh(i);

    int n;in>>n;
    A[1]=0,A[2]=0,A[3]=1,A[4]=11;
    PA[1]=0,PA[2]=0,PA[3]=1,PA[4]=7;
    P[1]=1,P[2]=2,P[3]=6,P[4]=24,P[5]=P[4]*5,P[6]=P[5]*6;
    R[1]=0,R[2]=1,R[3]=2,R[4]=5;
    R[5] = P[4]-A[4];
    A[5] = P[4]-R[2] + P[4]-R[3] + P[4]-R[4] + P[4]-R[5] + P[4]-R[5];
    out<<R[5]<<' '<<A[5]<<'\n';
    R[6] = P[5]-A[5];
    A[6] = P[5]-R[2] + P[5]-R[3] + P[5]-R[4] + P[5]-R[5] + P[5]-R[6] + P[5]-R[6];
    out<<R[6]<<' '<<A[6]<<'\n';*/