uva 10273(模拟)

题意:有若干个牛每个牛有一个序列每一天这头牛产奶d%tn单位(d当前天数,tn为序列长度)每天产奶最少的会被吃掉,如果有多头产奶一样少则什么也不吃。问最后会留下多少头牛,最后一头被吃掉的牛是在哪一天。

思路:水题。纯模拟每天更新牛的产奶数量,然后把它去掉。若是天数超多lcm(1-10)则不会再有牛吃了。

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #include <utility>
 7 #include <queue>
 8 #include <stack>
 9 #include <vector>
10 #define ll long long
11 #define INF 0x7fffffff
12 #define eps 1E-6
13 #define LEN 1010
14 #define pb(a) push_back(a)
15 
16 using namespace std;
17 
18 int n, num[LEN];
19 vector<int> milk[LEN];
20 
21 int main()
22 {
23 //    freopen("in.txt", "r", stdin);
24 
25     int T;
26     scanf("%d", &T);
27     while(T--){
28         scanf("%d", &n);
29         for(int i=0; i<LEN; i++)milk[i].clear();
30         for(int i=0; i<n; i++){
31             scanf("%d", &num[i]);
32             for(int j=0; j<num[i]; j++){
33                 int v;
34                 scanf("%d", &v);
35                 milk[i].pb(v);
36             }
37         }
38         int loc = -1, cnt = n, dm[LEN], vis[LEN];
39         memset(vis, 0, sizeof vis);
40         memset(dm, 0, sizeof dm);
41         for(int d=0; ;d++){
42             if(d-loc>700 || cnt==0)break;
43             int Minpos = -1, Min = INF;
44             for(int i=0; i<n; i++){
45                 if(vis[i])continue;
46                 dm[i] = milk[i][d%num[i]];
47                 if(Min==dm[i])Minpos = -1;
48                 if(Min>dm[i]){
49                     Min = dm[i];
50                     Minpos = i;
51                 }
52             }
53             if(Minpos!=-1){
54                 vis[Minpos] = 1;
55                 loc = d;
56                 cnt--;
57             }
58         }
59         printf("%d %d
", cnt, loc+1);
60     }
61     return 0;
62 }
View Code
奔跑吧!少年!趁着你还年轻
原文地址:https://www.cnblogs.com/shu-xiaohao/p/3493297.html