纪中集训2020.01.16【NOIP普及组】模拟赛C组总结+【0.Matrix】分析
题目:
0.matrix
1.product
2.binary
3.value
巨佬估分:100+100+40+100=340
巨佬得分:100+40+40+40=220
蒟蒻得分:100+0+40+0=140
仅仅第6(我太弱了 ),一共30个人比赛FAQ
比赛完,巨佬们:水(尽受藐视的蒟蒻(我) )
蒟蒻们(其实就只有我一个 )这个好像真的不会呀!emmmm…差距!
主要是:第二题题目错了,要不我就第1了。
所以实际得分:100+100+40+0=240
———————————华丽的分割线————————————
言归正传
题目大意:
WOW!Waterful!(水(WATER)+Wonderful)
输入:
输出:
样例输入
4 3 5
4 1 7 3
4 7 4 8
样例输出
59716
纯模拟呀!开心,只用赋个初始值,然后把F[i,j]=0,最后判断一下F[i,j-1],F[i-1,j]只要不等于0,就可以求F[i,j]!(是不是很开心,很惊讶呀! )
好吧,本来就这样,看好数据范围。
附上比赛AC Pascal 代码:
var
n,x,y,i,j:longint;
a,b:array[-105..1000005] of longint;
map:array[0..5005,0..5005] of int64;
begin
assign(input,'matrix.in');
reset(input);
assign(output,'matrix.out');
rewrite(output);
readln(n,x,y);
for i:=1 to n do
begin
read(a[i]);
end;
for i:=1 to n do
begin
read(b[i]);
end;
fillchar(map,sizeof(map),0);
for i:=1 to n do
begin
map[1,i]:=a[i];
map[i,1]:=b[i];
end;
for i:=1 to n do
begin
for j:=1 to n do
begin
if (map[i,j]=0) and (map[i-1,j]<>0) and (map[i,j-1]<>0) then
begin
map[i,j]:=(x*map[i-1,j]+y*map[i,j-1]) mod 1000000007;
end;
end;
end;
writeln(map[n,n]);
close(input);
close(output);
end.
附上C++ AC 代码:
#include<cstdio>
using namespace std;
int n,a,b;
long long map[5001][5001];
int main()
{
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
scanf("%d%d%d",&n,&a,&b);
for(int i=0;i<n;i++)
scanf("%lld",&map[i][0]);
for(int i=0;i<n;i++)
scanf("%lld",&map[0][i]);
for(int i=1;i<n;i++)
for(int j=1;j<n;j++)
map[i][j]=(a*map[i][j-1]+b*map[i-1][j])%1000000007;
printf("%lld",map[n-1][n-1]);
fclose(stdin);
fclose(stdout);
return 0;
}