Fork me on GitHub

SCAU 10686 DeathGod不知道的事情

10686 DeathGod不知道的事情

时间限制:1000MS  内存限制:65535K 提交次数:0 通过次数:0

题型: 编程题   语言: 无限制

Description

    蚂蚁是很强大的动物,除了DeathGod知道的事情外还有很多不知道的!例如… 
    根据某种理论,时间方向上有无数个平行世界,有的世界蚂蚁很多,有的世界蚂蚁很少,有的世界蚂蚁会繁殖,有的世界蚂蚁不会繁殖。 
DeathGod没有时空穿梭的能力,因此他无法知道所有的蚂蚁加起来到底有多少。但他知道未来的ACMer非常厉害,可以暂时抛弃肉体,以思维进行时空旅行。 因此他留下一段话给未来的ACMer,让他们帮他数一数,所有的平行世界总共有几只蚂蚁。 由于时间旅行是不可逆的,因此DeathGod只能让ACMer逆向推算出在DeathGod的那个时间点上所有的平行世界总共有多少只蚂蚁。 此时,未来的ACMer,就是你,已经在无数个平行世界中搜索过了(只用了一瞬间),在你所处的时间点上,第0,1,2,3…N-1个 平行世界上的蚂蚁数目分别为A[0],A[1],A[2],A[3]….A[N-1],为了简化计算,所以每个平行世界上的蚂蚁数目都是当作整数计算。 而已知每两只蚂蚁每过时间t,就会生出一只蚂蚁。如果有八只蚂蚁,那么过了时间t后就会变成十二只蚂蚁,再过时间t就会变成十八只蚂蚁。 如果蚂蚁数目是单数,比如有七只蚂蚁,那么过了时间t后就会变成十只蚂蚁。再过时间t就会变成十五只蚂蚁。有的世界里面的蚂蚁是不会繁衍的, 因此蚂蚁的个数就不会变化,不会遵从这个定律。假设所有的蚂蚁不会死亡。那么你应该可以计算出在DeathGod所在的时间点上, 最少可能存在几只蚂蚁(如果只有一只蚂蚁,是不会繁衍的,如果蚂蚁会繁衍,那么一定遵从上面的定律。如果不遵从上面定律的, 那么一定不会繁衍。且蚂蚁只能跟和自己同一个世界里的蚂蚁交配。) 不过,最囧的事情就是,即使你算出来了,由于信息无法逆时间方向传递,因此DeathGod还是无法知道。不过为了培养未来的ACMer的耐心和毅力, 以及面对恶心模拟题时不至于双眼发昏脑袋发胀,因此还是要把答案算出来。

Input

第一行输入case数T(T<100),第二行开始每个case输入一个N表示平行世界的数目,输入一个t表示蚂蚁繁衍间隔时间,
输入t1,t2表示DeathGod所在时间和未来的ACMer所在时间。接下来换行输入A[0],A[1]…A[N-1],用空格间开。
(0<A[0]…A[N-1],t,t1,t2<=10000,0<N<1000,t<t1<t2)。

Output

对于每个case输出一个蚂蚁的总数,每个一行。

Sample Input

2
1 1 0 2
10
2 1 0 4
28 23

Sample Output

5
29

Source

by 200931000726

Provider

admin

 

复制代码
#include<stdio.h>
#include<string.h>

int main()
{
    int i, j, T, n, t, t1, t2, time, temp, res;
    int dat[1020];
    scanf("%d", &T);
    while(T--)
    {
        res = 0;
        memset(dat, 0, sizeof(dat));
        scanf("%d%d%d%d", &n, &t, &t1, &t2);
        if((time = t2 - t1) < 0) break;
        time = time/t;
        for(i=0; i<n; ++i)             
        {
            scanf("%d", &dat[i]);
            if(dat[i]%3 == 2 || dat[i] == 1) res += dat[i];
            else
            {
                temp = dat[i];
                for(j=1; j<=time; ++j)
                {
                    temp = temp/3*2 + temp%3;
                    if(time > j && temp%3 == 2) break;
                }
                if(j < time) res += dat[i];
                else res += temp;
            }
        }
        printf("%d\n", res);
    }
    return 0;
}
复制代码

 

解题报告:

posted @   Gifur  阅读(725)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
TOP
点击右上角即可分享
微信分享提示