记录编号 160204 评测结果 AAAAAAAAAAAAAAA
题目名称 牛跳房子 最终得分 100
用户昵称 GravatarSatoshi 是否通过 通过
代码语言 C++ 运行时间 1.515 s
提交时间 2015-04-24 17:09:56 内存使用 6.77 MiB
显示代码纯文本
#include <fstream>
#include <string.h>
using namespace std;
ifstream in("hopscotch.in");
ofstream out("hopscotch.out");
int n,m,k;
int af[751][751]={0};
int f[751][751]={0};
int c[751*751+10];
int MOD=1000000007;
int sum=0;
int mod(int x)
{
	x%=MOD;
	if(x<0)x+=MOD;
	return x;
}
int add(int a,int b)
{
	a=mod(a+b);
	return a;
}
void mark(int l,int r)
{
	int i,j;
	if(l==r)return ;
	int mid=(l+r)/2;
	mark(l,mid);
	sum=0;
	for(i=1;i<=n;i++)
	{
		for(j=mid+1;j<=r;j++)
		{
			f[i][j]=add(f[i][j],mod(sum-c[af[i][j]]));
		}
		for(j=l;j<=mid;j++)
		{
			sum=add(sum,f[i][j]);
			c[af[i][j]]=add(c[af[i][j]],f[i][j]);
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=l;j<=mid;j++)c[af[i][j]]=0;
	}
	mark(mid+1,r);
}
int main()
{
	int i,j;
	in>>n>>m>>k;
	f[1][1]=1;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			in>>af[i][j];
		}
	}
	mark(1,m);
	out<<f[n][m];
	return 0;
}