前言
这里是蒟蒻TIMEpings,这是我第一次真正动手写题解 (虽然之前有想过很多次) ,有误之处请各位大佬多多指出(=・ω・=)!
快速导航ε=ε=(ノ≧∇≦ノ
题目传送门(LOJ)
思路1-完全模拟(TLE警告)
当蒟蒻走投无路时,这种解法是骗分的好助手
全局变量们
#define MAXN 7100000+7 //n+m的最大值,我把所有的蚯蚓都放里面了
int worm[MAXN];
int n,m,q,u,v,t;
double p;
int now_worm_cnt; //当前蚯蚓计数
int spc; //读秒,第一行的输出所需
int edT; //要求的[输出m秒后第n*t名的蚯蚓长度]的次数
main()
scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
p = u*1.0/v; //有理数警告
now_worm_cnt=n; //现在有n条蚯蚓(废话)
int ai;
for(int i=1;i<=n;i++)
{
scanf("%d",&ai);
worm[i]=ai;
}
edT = (n+m)/t;
for(int i=1;i<=m;i++) doworm();
print_answer();
先输入6个参数,提前把p算出来(这样可能会影响精度,不推荐),向worm里存每个蚯蚓,edT算出来也算是半个暴力优化,在print_answer()里面会体现。
时间复杂度的主要承担者之一doworm()需要循环做m次。
doworm()
“模拟的大框架”
spc++; //第一行输出记步
sort(worm+1,worm+1+now_worm_cnt,cmp); //降序自动快排咯
int topworm = worm[1]; //刀砍出头虫
if(spc==t) //步输出周期已到
{
printf("%d ",topworm); //出头虫上榜
spc=0; //读秒归零
}
cut(topworm)