2019牛客国庆集训派对day1 F.4 Buttons(思维)

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019牛客国庆集训派对day1 F.4 Buttons(思维)相关的知识,希望对你有一定的参考价值。

LINK

首先只需要考虑能走到第一象限的哪些格子,第二,第三,第四都是类似的

第一象限的话就是使用向上的按钮,每次最多 a a a

向右每次最多 b b b

如果我们能到 ( x , y ) (x,y) (x,y)这个格子,那么 ( 0 , 0 ) (0,0) (0,0) ( x , y ) (x,y) (x,y)围成的矩形内部的格子都可以到达

所以我们选择每次都向上走 a a a步或者向右 b b b步观察一下

当按向上 1 1 1次时,向右按了 n − 1 n-1 n1次,到达 ( ( n − 1 ) ∗ b , a ) ((n-1)*b,a) ((n1)b,a)这个点

当按向上 2 2 2次时,向右按了 n − 2 n-2 n2次,到达 ( ( n − 2 ) ∗ b , 2 a ) ((n-2)*b,2a) ((n2)b,2a)这个点

画在图上,就是围成了一个个矩形,长都是 b b b,宽为 a , 2 a , 3 a a,2a,3a a,2a,3a递增的一个个矩形

等差数列算一下就好了

最后加上一种按钮自己组合的方案即可

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9+7;
int n,a,b,c,d;
int solve(int a,int b)
{
	return n*(n-1)/2%mod*a%mod*b%mod;
}
signed main()
{
	while( cin >> n >> a >> b >> c >> d )
	{
		int ans = 0;
		ans = solve(a,b)+solve(a,d)+solve(c,b)+solve(c,d);
		ans = ( ans%mod + n*(a+b+c+d)%mod )%mod;
		cout << ( ans+1 )%mod << endl;
	}
}

以上是关于2019牛客国庆集训派对day1 F.4 Buttons(思维)的主要内容,如果未能解决你的问题,请参考以下文章

2019牛客国庆集训派对day1 D.Modulo Nine(巧妙的dp)

2019牛客国庆集训派对day3 排列(状压dp)

2019牛客国庆集训派对day3 时间旅行(思维)

2019牛客国庆集训派对day3 J.买一送一(dfs+组合数学)

2019牛客国庆集训派对day2 C.Just h-index(主席树)

2019牛客国庆集训派对day2 J.Vertex Cover(思维,组合数学算贡献)