版权声明:欢迎转载,注明出处QWQ https://blog.csdn.net/Mercury_Lc/article/details/83796484
Cats and Fish
题意:
有一些猫和一些鱼,每只猫有固定的吃鱼速度,吃的快的猫优先选择吃鱼,问在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;
}