Cod sursa(job #467096)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 28 iunie 2010 11:28:27
Problema Pod Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 0.96 kb
#include<algorithm>
#include<vector>
using namespace std;
#define MOD 9901
#define MOD1 31
int n,m,k,i,x;
int lipsa[1005];
int ind1,indk,indi;
int a[36];
int prec[20001];
int main()
{
	freopen("pod.in","r",stdin);
	freopen("pod.out","w",stdout);

	for(i=1;i<=20000;i++)
		prec[i]=i%MOD;

	scanf("%d%d%d",&n,&m,&k);

	for(i=1;i<=m;i++)
		scanf("%d",&lipsa[i]);

	sort(lipsa+1,lipsa+m+1);

	if(lipsa[m]==n)
	{
		printf("0\n");
		return 0;
	}

	lipsa[m+1]=(1<<30);

	ind1=indk=indi=1;
	a[1]=a[k]=1;
	int i1=0,ik=0,ii;
	for(i=1;i<=n;i++)
	{
		i1=0;	ik=0;
		ii=i&MOD1;
		if(i>k)
			a[ii]=0;
		if(lipsa[indi]==i)
		{
			indi++;
			continue;
		}
		i1=(i-1)>0?(i-1)&MOD1:0;
		ik=(i-k)>0?(i-k)&MOD1:0;
		if(lipsa[ind1]==i-1)
			ind1++;
		else
		{
			a[ii]+=a[i1];
			a[ii]=prec[a[ii]];
		}

		if(lipsa[indk]==i-k)
			indk++;
		else
		{
			a[ii]+=a[ik];
			a[ii]=prec[a[ii]];
		}
	}

	printf("%d\n",a[(n&MOD1)]);
	return 0;
}