Cats and Fish HihoCoder - 1631

版权声明:欢迎转载,注明出处QWQ https://blog.csdn.net/Mercury_Lc/article/details/83796484

Cats and Fish

 HihoCoder - 1631

题意:

有一些猫和一些鱼,每只猫有固定的吃鱼速度,吃的快的猫优先选择吃鱼,问在x秒时有多少完整的鱼和有多少猫正在吃鱼?

题解:

模拟一下。两层循环模拟在每一秒时,每个猫的状态是什么样子的,如果在这一秒这个猫没有吃鱼,而鱼还有剩余,那么就给猫吃,如果当前t秒是猫吃鱼速度的倍数,就说明这个猫刚好吃完,又可以给她鱼吃了。

#include <bits/stdc++.h>
using namespace std;
struct node
{
    int f;  // f当前是否有鱼吃 v是吃鱼的速度
    int v;
} s[1005];
bool cmp(struct node a,struct node b)
{
    return a.v < b.v;
}
int main()
{
    int n,m,x;
    while(~scanf("%d %d %d", &m, &n, &x))
    {
        for(int i = 1; i <= n; i ++)
        {
            scanf("%d",&s[i].v);
            s[i].f = 0;
        }
        sort(s + 1, s + 1 + n, cmp);
        int sum1 = m, sum2 = 0;
        for(int i = 0; i <= x; i ++)
        {
            for(int j = 1; j <= n; j ++)
            {
                if(i % s[j].v == 0)   // 如果当前是这个猫的吃鱼的速度的倍数,那么肯定能够给ta吃。
                    s[j].f = 0;
                if(sum1 <= 0)   // 如果没有鱼了,就不用继续了
                    continue;
                else           // 否则,当前这只没有鱼吃的猫会选择一条鱼吃
                {
                    if(s[j].f == 0 && i != x)   // i是从0开始
                    {
                        s[j].f = 1;
                        sum1--;
                    }
                }
            }
        }
        for(int j = 1; j <= n; j ++)   // 还有标记的猫就是正在第x秒在吃鱼的啦
        {
            if(s[j].f == 1)
                sum2 ++;
        }
        printf("%d %d\n",sum1,sum2);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Mercury_Lc/article/details/83796484
今日推荐