纪中集训2020.01.16【NOIP普及组】模拟赛C组总结+【0.Matrix】分析

纪中集训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

———————————华丽的分割线————————————

言归正传

题目大意:纪中集训2020.01.16【NOIP普及组】模拟赛C组总结+【0.Matrix】分析_第1张图片
WOW!Waterful!(水(WATER)+Wonderful)
输入:
纪中集训2020.01.16【NOIP普及组】模拟赛C组总结+【0.Matrix】分析_第2张图片
输出:
在这里插入图片描述
样例输入
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
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;
}

END!

下一题:纪中集训2020.01.16【NOIP普及组】模拟赛C组——————【1.product】解析

你可能感兴趣的:(纪中集训2020.01.16【NOIP普及组】模拟赛C组总结+【0.Matrix】分析)