csu 1769(数学)

1769: 想打架吗?算我一个!所有人,都过来!(3)

Time Limit: 2 Sec  Memory Limit: 128 MB
Submit: 262  Solved: 76
[Submit][Status][Web Board]

Description


在《炉石传说》这款卡牌游戏已经风靡全球。2015年加入环境的“黑石山的火焰”扩展带来了一个新套牌的核心卡片“恐怖的奴隶主”,而这套统治游戏的套牌
叫做“奴隶战”。“恐怖的奴隶主”的登场音效“想打架吗?算我一个!”一定在所有这个时代的《炉石传说》玩家心里留下来难以磨灭的印象。
“恐怖的奴隶主”是一个有3点生命值的生物,当其在场上受到非致命伤害时(如3点生命值的奴隶主受到1点或2点伤害时,或者2点生命值的奴隶主受到1点伤
害时)会召唤一个新的3点生命值的“恐怖的奴隶主”,受到致命伤害(伤害大于等于现有生命值)时则会直接死去。另外一类卡片可以使全部生物造成1点伤害
(降低1点生命),被称为“旋风斩效果”。因此“恐怖的奴隶主”,在场上经过多次“旋风斩效果”就可能由一个变成很多个,同时发出那个令人恐惧的声音“所
有人,都过来!”。
另一方面,《炉石传说》规定,场上最多存在7个生物,这极大地限制了“恐怖的奴隶主”“越生越多”。当一次“旋风斩效果”发生时,优先处理受到非致命伤害
的“恐怖的奴隶主”,召唤新的“恐怖的奴隶主”,直到生物数量达到7个不再继续召唤新的“恐怖的奴隶主”,然后清除掉生命值降为0或0以下的“恐怖奴隶
主”。如场上有7个生命值为1的“恐怖的奴隶主”,则一次“旋风斩效果”后场上有0个“恐怖的奴隶主”。又如,场上有6个生命值为3的“恐怖的奴隶主”,
则一次“旋风斩效果”后场上有6个2点生命的“恐怖的奴隶主”以及1个3点生命的“恐怖的奴隶主”。又如,场上有4个1点生命的“恐怖的奴隶主”以及2个
2点生命的“恐怖的奴隶主”,则一次“旋风斩效果”后场上有2个1点生命的“恐怖的奴隶主”以及1个3点生命的“恐怖的奴隶主”。
在本系列题目2中我们已经知道了如何计算多个“恐怖的奴隶主”在经历n次旋风斩效果后会剩下多少。现在游戏出现了bug,场上奴隶主的个数不再受到7个的
上限限制了。场上剩下了一些1点生命,一些2点生命,一些3点生命的奴隶主,现在问这些奴隶主经过n次旋风斩效果,场面会变成什么样子。

Input

有多组数据。
每组数据一行,hp1,hp2,hp3,n(0<=hp1,hp2,hp3<=10^9,0<=n<=10^6)
分别代表1点生命,2点生命,3点生命的奴隶主个数,以及之后旋风斩次数。

Output

每组用一行输出最终总的奴隶主个数(结果对1000000007取模),格式见样例。

Sample Input

1 1 1 3
3 3 3 2

Sample Output

10
18

推一下前几项: a‘[1]=a[2],a‘[2]=a[3],a‘[3]=a[2]+a[3] sum[1] = 2*(a[2]+a[3]) 依次类推:sum[2] = 2*(a‘[2]+a‘[3]) = 2*(a[2]+2*a[3])....会发现sum[k] a[2]的系数是斐波拉契数列的第k-1项,a[3]的系数是第 k 项。打表,O(1)查询.
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL mod = 1000000007;
const int N = 1000005;
LL fab[N];
void init(){
    fab[0] = 1;
    fab[1] = 1;
    for(int i=2;i<N;i++){
        fab[i] = (fab[i-1]+fab[i-2])%mod;
    }
}
int main()
{
    init();
    LL a,b,c;
    int k;
    while(scanf("%lld%lld%lld%d",&a,&b,&c,&k)!=EOF){
        LL ans1 = fab[k-1]*b%mod;
        LL ans2 = fab[k]*c%mod;
        printf("%lld\n",((ans1+ans2)*2)%mod);
    }
    return 0;
}
时间: 2024-11-05 01:01:56

csu 1769(数学)的相关文章

CSU 1290 DP解决数学期望问题

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1290 题目大意: 给定k个数,每次可以生成0-N-1中的任何一个数,k个数中出现不同的整数的个数的数学期望 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 #define N 1005 5 double dp[N]; 6 int main() 7 { 8 int T,k,n; 9 scan

【数学】CSU 1810 Reverse (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1810 题目大意: 一个长度为N的十进制数,R(i,j)表示将第i位到第j位翻转过来后的数字,求mod 109+7 题目思路: [数学] 这题换一种思路,看每个数字能够对答案的贡献情况.(可以手推01,10,001,010,100.....,也可以像我一样写个暴力打个10以内的表看看规律) 现在先考虑位置为i的数字为1的情况(最后乘上这个数字就行).可以发现贡献是对称的(第i位的1和第

【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1<=j<=m,求i*j%2016=0的方案数. 题目思路: [模拟][数学] 按照%2016的余数分类.每增加一个2016就又多一种方案.统计是2016的几倍,根据余数分类.最后枚举i,j的余数即可求解. 1 // 2 //by coolxxx 3 //#include<bits/stdc++

CSU 1505: 酷酷的单词(数学啊)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1505 Description 输入一些仅由小写字母组成的单词.你的任务是统计有多少个单词是"酷"的,即每种字母出现的次数都不同. 比如ada是酷的,因为a出现2次,d出现1次,而1和2不同.再比如,banana也是酷的,因为a出现3次,n出现2次,b出现1次.但是,bbacccd不是酷的,因为a和d出现的次数相同(均为1次). Input 输入包含不超过30组数据.每组数据第

CSU 1507: 超大型LED显示屏(数学啊)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1507 Description Input 输入包含不超过100组数据.每组数据第一行为"START hh:mm:ss",表示比赛开始时刻为hh:mm:ss.最后一行为"END hh:mm:ss",即比赛结束时刻.二者之间至少会有一个SCORE信息,格式为"SCORE hh:mm:ss team score",其中team要么是"

CSU 1409: 集合的并(数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1409 Description 给出两个由整数组成的集合A, B,计算A ∪ B中包含多少个整数. Input 输入的第一行包含一个整数T (T > 0),表示一共有T组测试数据. 对于每组测试数据,第一行包含一个整数n (1 ≤ n ≤ 105).第二行包含2n个整数a1, b1, a2, b2, ..., an, bn (0 < a1 ≤ b1 < a2 ≤ b2 < 

CSU 1410: 整数转换(数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1410 Description 我们可以通过对一个整数A进行加1操作或者乘2操作使其转换为另一个整数B. 给出两个整数X, Y,计算至少需要多少步才能将X转换为Y.. Input 输入的第一行包含一个整数T (1 ≤ T ≤ 500),表示一共有T组测试数据. 每组测试数据占一行,包含两个整数X, Y (1 ≤ X ≤ Y ≤ 1018). Output 对于每组测试数据,输出至少需要多

CSU 1265: Dice (数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1265 Description An example of a traditional dice is a rounded cube, with each of its six faces showing a different number of dots from 1 to 6. When thrown or rolled, the dice comes to rest showin

CSU 1266: Divisible by 11 (数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1266 Description 对于一个整数x,记x的自右向左的各位分别为第1位,第2位,--如果x奇数位上的数字之和减去偶数位上的数字之和所得的结果能被11整除,那么x就能被11整除. Input 输入数据的第一行包含一个整数T (1 <= T <= 200),表示接下来一共有T组测试数据. 每组测试数据占一行,包含一个位数不超过100位的正整数x. Output 对于每组测试数据,