2019牛客国庆集训派对day1 F.4 Buttons(思维)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019牛客国庆集训派对day1 F.4 Buttons(思维)相关的知识,希望对你有一定的参考价值。
首先只需要考虑能走到第一象限的哪些格子,第二,第三,第四都是类似的
第一象限的话就是使用向上的按钮,每次最多 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 n−1次,到达 ( ( n − 1 ) ∗ b , a ) ((n-1)*b,a) ((n−1)∗b,a)这个点
当按向上 2 2 2次时,向右按了 n − 2 n-2 n−2次,到达 ( ( n − 2 ) ∗ b , 2 a ) ((n-2)*b,2a) ((n−2)∗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 J.买一送一(dfs+组合数学)