Cod sursa(job #67562)

Utilizator blasterzMircea Dima blasterz Data 25 iunie 2007 11:44:21
Problema P-sir Scor 10
Compilator cpp Status done
Runda preONI 2007, Runda Finala, Clasele 11-12 Marime 1.24 kb
#include <cstdio>
#define maxn 1024
#define mod (1<<32)
#define ull long long
#define ui unsigned int
ui dp[maxn][maxn];
unsigned int n;
unsigned int x[maxn];

void citire()
{
	freopen("psir.in", "r", stdin);
	scanf("%d\n", &n);
	for(int i=1;i<=n;++i) scanf("%d ", x+i);
}

void dynamic()
{
  
	int i, j,k;
	long long s1,s,s2;
	for(i=1;i<n;i++)
		for(j=i+1;j<=n;++j)dp[i][j]=1;
	
	for(j=2;j<=n;++j)
		for(i=j+1;i<=n;++i)
		{
		//	printf("%d %d\n", j, i);
			 s1=(long long)x[i]-x[j];
			//if(s>0)
			{
				//printf("%d__ %d %d\n", x[j], x[i], x[i]-x[j]);
				
				for(k=1;k<j;++k)
				{
					s2=(long long)x[i]-x[k];
					s=(long long)s1*s2;
					if(s<0)
					  {
						
					    dp[j][i]+=dp[k][j];
					    dp[j][i]&=31;
					    //   while(dp[j][i]>mod) dp[j][i]-=mod;
					  }
				}
			}		
/*
			if(s<0)
			{
				
				for(k=1;k<j;++k)
					if(x[i]-x[k]>0)
						dp[j][i]+=dp[k][j];
			}
			 */
		}
	int sum=0;
	for(i=1;i<n;++i)
		for(j=i+1;j<=n;++j) 
		  sum+=dp[i][j]&31;
	/*	
		for(i=1;i<=n;++i)
		{
			for(j=1;j<=n;++j)printf("%d ", dp[i][j]);
			printf("\n");
		}
*/
		printf("%u\n", sum);
}

int main()
{
  freopen("psir.out", "w", stdout);
	citire();
	dynamic();
       
	return 0;
}