题意:N头奶牛,第i头牛产奶有周期Ti,即第d天产量等于第d+Ti天产量。每天主人杀掉产量最少的牛,如果多头产量最少,则不会杀掉。问最后能剩下多少牛,以及最后一次杀牛的天数。
思路:模拟。如果连续若干天牛不被杀,以后就不会被杀了。那到底是连续多少天呢,直接用1~10的最小公倍数2520。。。
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <ctype.h>
#define INF 1000000
using namespace std;
int cyc[10010];
int cow[10010][12];
bool eat[10010];
int main(){
int T;
cin>>T;
int N;
while(T--){
memset(eat,0,sizeof(eat));
cin>>N;
for(int i=1;i<=N;i++){
cin>>cyc[i];
for(int j=0;j<cyc[i];j++){
cin>>cow[i][j];
}
}
int b=0;
int count=0;
int last;
for(int day=1;;day++){
int tmp=INF;
bool flag=false;
int k;
for(int i=1;i<=N;i++){
if(eat[i])continue;
if( cow[i][(day-1)%cyc[i]]<tmp ){
tmp=cow[i][(day-1)%cyc[i]];
k=i;
flag=true;
}else if( cow[i][(day-1)%cyc[i]]==tmp ){
flag=false;
}
}
if(b>2520)break;
if(flag){
b=0;
eat[k]=true;
count++;
last=day;
}else{
b++;
}
}
if(count){
cout<<N-count<<" "<<last<<endl;
}else{
cout<<N-count<<" "<<0<<endl;
}
}
return 0;
}