Cod sursa(job #197625)

Utilizator hadesgamesTache Alexandru hadesgames Data 5 iulie 2008 12:22:40
Problema Grigo Scor 0
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 0.86 kb
#include <stdio.h>
#include <vector>
#include <queue>
#include <list>
#include <set>
#include <algorithm>
#include <utility>
#include <string>
using namespace std;
#define FOR(i,a,b) for (typeof a i=a;i<=b;i++)
#define fori(it,v) for (typeof ((v).begin()) it=(v).begin();it!=(v).end();it++)
#define pb push_back
#define mp make_pair
#define fs first
#define ss second
#define all(c) c.begin(),c.end()
int ver[100005],val[100005],n,m;
long long prod,fact;
int main()
{
	FILE *in,*out;
	in=fopen("grigo.in","r");
	out=fopen("grigo.out","w");
	fscanf(in,"%d%d",&n,&m);
	FOR(i,1,m)
		fscanf(in,"%d",&val[i]);
	sort(val+1,val+m+1);
	FOR(i,2,m)
		ver[val[i]-val[i-1]]++;
	ver[n-val[m]+1]++;
	prod=1;
	fact=1;
	FOR(i,1,n)
	{
		fact=(fact*i)%1000003;
		while (ver[i])
		{
			prod=(prod*fact)%1000003;
			ver[i]--;
		}
	}
	fprintf(out,"%lld\n",prod);
	fclose(in);
	fclose(out);
	return 0;
}