记录编号 |
160204 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
牛跳房子 |
最终得分 |
100 |
用户昵称 |
Satoshi |
是否通过 |
通过 |
代码语言 |
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;
}