Cats and Fish HihoCoder - 1631
阿新 • • 發佈:2018-11-19
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; }