我是用暴力过的,虽然网上说刘汝佳出的这道题考的是堆,我不太懂,。。用暴力时间复杂度高一些,但是一样能过

所要注意的就是周期问题,因为只要同时存在某一天超过一头牛产奶量最小,就不会杀牛,而每头牛的周期和每天产奶量都不一样,我一开始用周期最长的做指标,如果超过这个指标还没有牛被杀,说明状态稳定,输出。。。但是这样是WA的。。。

正确的周期应该是所有牛的周期的最小公倍数(也可以超过最小公倍数,但无疑最小公倍数是最优的),这也给了我一些新启发,周期不同的时候把所有可能性都走完,就是最小公倍数

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{
int d[];
int t,cnt;
} cow[];
int gcd(int a,int b)
{
if (b==) return a;
else
return gcd(b,a%b);
}
int eat[];
int n,maxn,day,ans;
void solve()
{
ans=day=;
int cur=;
while ()
{
int mini=<<,loc,counts=;
for (int i=; i<=n; i++)
{
if (eat[i]) continue;
if (cow[i].d[cow[i].cnt]<mini)
{
mini=cow[i].d[cow[i].cnt];
loc=i;
counts=;
}
else if (cow[i].d[cow[i].cnt]==mini)
{
counts++;
}
cow[i].cnt=(cow[i].cnt+)%cow[i].t;
}
day++;
cur++;
//cout<<day<<" "<<loc<<endl;
//cout<<"maxn "<<maxn<<endl;
if (counts==)
{
eat[loc]=;
cur=;
ans=day;
}
else if (cur>maxn) break;
}
}
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
maxn=;
for (int i=; i<=n; i++)
{
scanf("%d",&cow[i].t);
eat[i]=;
cow[i].cnt=;
for (int j=; j<cow[i].t; j++)
scanf("%d",&cow[i].d[j]);
if (maxn<cow[i].t)
{
int temp;
temp=gcd(cow[i].t,maxn);
maxn=maxn*cow[i].t/temp;
}
else
{
int temp;
temp=gcd(maxn,cow[i].t);
maxn=maxn*cow[i].t/temp;
}
}
//out<<maxn<<endl;
solve();
int num=;
for (int i=; i<=n; i++)
{
if (!eat[i]) num++;
}
printf("%d %d\n",num,ans);
}
return ;
}

最新文章

  1. Lesson 7 Too late
  2. 烂泥:【转】rsync命令参数详解
  3. SVO实时全局光照优化(里程碑MK0):Sparse Voxel Octree based Global Illumination (SVO GI)
  4. Oracle触发器使用介绍
  5. mongodb配置及简单示例
  6. 1password密码文件重装后恢复
  7. 【MySQL】Event事件与游标
  8. SSH开发实践part1:Spring与Hibernate整合
  9. Windows 10正式版官方原版ISO镜像下载
  10. 从CR线下活动学到的:如何组织一个小的线下活动
  11. nginx定时备份access访问日志并重启nginx
  12. hdu2460-Network:边的双连通分量
  13. activemq下activemq.bat不能启动
  14. SQL如何实现远程数据库链接
  15. 微信小程序-获取经纬度
  16. java8_api_math
  17. Java思维理清思路
  18. DAY15 模块
  19. Unity、C#读取XML
  20. [administrative][lvm] lvm 分区修改

热门文章

  1. js里事件传播流程
  2. 小程序开发顶部TAB栏和侧边分类点击
  3. 云时代架构阅读笔记七——Java多线程中如何使用synchronized关键字
  4. Spring 实战4学习笔记(转)
  5. echarts 柱状图的选中模式实现-被选中变色和再次选中为取消变色
  6. TX2--安装跑一python3.5
  7. 个人微信开发API协议(转)
  8. 不同DIV滚动条如何同步?
  9. web网页外部分享到微信、朋友圈、扣扣、微博等功能、自动生成二维码等
  10. mysql第四篇--SQL逻辑查询语句执行顺序