洛谷P2827

其实是一道不是很难的模拟题,暴力好像可以拿80,AC的话要发现其中隐含的单调性

首先是一个小技巧,每次将所有蚯蚓的长度都+q肯定时间复杂度很大,那我们就想,其他所有的蚯蚓加,就相当于取出的蚯蚓减,再存储一下这是第几秒,输出或切蚯蚓的时候将存储的值加上秒数*q即可

然后就是题目中的单调性。对于两只蚯蚓x1,x2,设x1>x2且两者被切时间相差t,由题意显然x1比x2先被切。

那么我们可以列式算出x1和x2切出的蚯蚓到x2被切完那一秒的长度

x1切成的蚯蚓:[px1]+tq,x1-[px1]+tq(取整符号打不出来用方括号[]代替)

x2切成的蚯蚓:[p(x2+tq)]=[px2+ptq],x2-[p(x2+tq)]=x2-[px2+ptq]

tq>ptq且x1>x2,所以[px1]+tq>[p(x2+tq)]。证后半部分时可先去掉取整符号看,上面是(1-p)x1+tq,下面是(1-p)x2-ptq,因为x1>x2,tq>-ptq,所以上面显然大于下面,加上取整后误差不大于1,所以x1-[px1]+tq>x2-[p(x1+tq)]

这样我们就证明了先被切的蚯蚓切成的蚯蚓长度一定大于后被切的蚯蚓切成的蚯蚓长度(按顺序)

然后我们就可以用三个数组来存放,第一个数组表示原蚯蚓,从大到小排序一遍即可,然后每次切的蚯蚓放在第二个数组和第三个数组,这样每个数组都一定是从大到小的,每次取最大的切就可以了(其实就相当于手写优先队列,只不过插入的元素是有序的而已)

最后再把三个数组中的剩余元素放在一起排序一下即可(不要用STL优先队列!会超时!)

贴个代码:

 #include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
using namespace std;
int chong[][],left[]={,,},right[];//存储三堆蚯蚓及它们的左右位置
int ans[],tot;//存放答案并排序的数组
inline int front(int x)//取第x堆的队首元素
{
if(left[x]>right[x])
return INT_MIN;
else
return chong[x][left[x]];
}
bool comp(int a,int b)
{
return a>b;
}
int main()
{
int n,m,q,u,v,t,base=;//base是当前已进行的累加和
scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
right[]=n;
for(int i=;i<=n;i++)
scanf("%d",&chong[][i]);
sort(chong[]+,chong[]++n,comp);
for(int i=;i<=m;i++)
{
int flag=;//标记哪一堆的蚯蚓最大
int a=front(),b=front(),c=front();
if(c>=b&&c>=a)
flag=;
else if(b>=a&&b>=c)
flag=;
a=chong[flag][left[flag]]+base;//最大蚯蚓实际长度
b=(int)((long long)u*a/(double)v);
c=a-b;
b-=base+q,c-=base+q;//其他的加相当于取出的减
left[flag]++;//取蚯蚓
chong[][++right[]]=b;//放蚯蚓
chong[][++right[]]=c;
if(i%t==)//被t整除时输出长度
printf("%d ",a);
base+=q;//每次加q
}
printf("\n");
for(int i=;i<;i++)//将剩下的蚯蚓排列
for(int j=left[i];j<=right[i];j++)
ans[++tot]=chong[i][j];
sort(ans+,ans++tot,comp);
for(int i=;i<=tot;i++)
if(i%t==)
printf("%d ",ans[i]+base);
printf("\n");
return ;
}

 两个注意事项:

1、要做长度标记(每个时刻蚯蚓伸长的总长度,切和输出时都要加上!)

2、判断三者大小关系时一定要用大于等于!且注意关系,比如c最大是c>=a&&c>=b而不是c>=b&&b>=a(第一次就因为这个WA成35分)

3、找三个队列中最大元素不能不判断队列是否为空,因为前面我们用减代替加,会有负数,初始化的元素为0会让我们取到,所以我直接写了一个取队首元素函数,当队列为空的时候就返回负无穷大

NOIP2016 D2T2 蚯蚓的更多相关文章

  1. NOIP 2016 D2T2 蚯蚓](思维)

    NOIP 2016 D2T2 蚯蚓 题目大意 本题中,我们将用符号 \(\lfloor c \rfloor⌊c⌋\) 表示对 \(c\) 向下取整,例如:\(\lfloor 3.0 \rfloor = ...

  2. UOJ264 【NOIP2016】蚯蚓

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. 【NOIP2016】蚯蚓(队列,单调性)

    题目不再重复叙述 请参考: 洛谷 CJOJ 题解 先来说说非完美解法,也是我去年考场上的做法 考虑一下每一只蚯蚓增加的长度, 这个值并不需要每一次依次增加, 用一个变量维护即可,每次取出蚯蚓就加上这个 ...

  4. 【NOIP2016】蚯蚓(单调队列)

    题意: 思路: 我们发现,对于任意两次切割i和j,i<j,在进行完第j次切割后,第i次切割的u/v部分一定大于等于第j次切割的u/v部分,第i次的1-u/v部分也一定大于等于第j次的1-u/v部 ...

  5. 【NOIP2016】蚯蚓

    Description 本题中,我们将用符号 ⌊c⌋表示对 cc 向下取整,例如:⌊3.0⌋=⌊3.1⌋=⌊3.9⌋=3. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀 ...

  6. $Noip2016/Luogu2827$蚯蚓

    $Luogu$ $Sol$ 乍一看就是个模拟叭,用个优先队列维护不就好了.不过这里有一个问题就是怎么解决没被切的蚯蚓的增长问题.可以这样处理,每次切一条蚯蚓,给切完之后的都减去$q$,最后输出答案时都 ...

  7. 「NOIP2016」蚯蚓

    传送门 Luogu 解题思路 很容易想到用一个堆去维护,但是复杂度是 \(O((n+m)\log(n+m))\) 的,显然过不了 \(7e6\). 其实这题有一个性质: 先被切开的蚯蚓,得到的两条新蚯 ...

  8. LOJ2362. 「NOIP2016」蚯蚓【单调队列】

    LINK 思路 良心来说这题还挺思维的 我没看题解也不知道要这样维护 把每次斩断的点分别放进两个队列里面 因为要维护增长,所以可以让新进队的节点来一个负增长? 是不是就好了? 然后很容易发现因为在原始 ...

  9. 【noip2016】蚯蚓(单调性+队列)

    题目贼长 大意是你有n个线段,每一秒你要拿出来最长的一个线段切成两段长度为[p*u](向下取整)和u-[p*u]两段(其中u是线段长,p是一个大于0小于1的实数)没被切的线段长度加q(0<q&l ...

随机推荐

  1. 为什么我上传了flv或MP4文件到服务器,可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢

    常用MIME类型(Flv,Mp4的mime类型设置) 也许你会在纳闷,为什么我上传了flv或MP4文件到服务器,可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢?这就表明mp ...

  2. C++拷贝构造函数心得

    C++Primer作者提到拷贝构造函数调用的三种时机: 1. 当用一个类对象去初始化另外一个类对象(类似于 AClass aInstance = bInstance),这里不是调用赋值构造函数(也叫赋 ...

  3. visualSVN提交强制添加注释

    Visual SVN Server下 右键项目  “所有任务”>“Manage Hooks” >选中Pre-commit hook然后edit编辑,添加如下代码 @echo off set ...

  4. 【MM系列】SAP MM模块-BOM展开函数

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-BOM展开函数   ...

  5. 数据结构系列之2-3-4树的插入、查找、删除和遍历完整版源代码实现与分析(dart语言实现)

    本文属于原创,转载请注明来源. 在上一篇博文中,详细介绍了2-3树的操作(具体地址:https://www.cnblogs.com/outerspace/p/10861488.html),那么对于更多 ...

  6. Discrete Mathematics and Its Applications | 1 CHAPTER The Foundations: Logic and Proofs | 1.3 Propositional Equivalences

    DEFINITION 1 A compound proposition that is always true,no matter what the truth values of the propo ...

  7. MVC中的cshtml与ASPX的区别

    在MVC3中,即可以使用cshtml,也可以使用aspx, 这两者到底有什么区别呢? 越详细越好,如果是用来正式开发,用哪种比较好. --------------------------------- ...

  8. ConfigurationManager.ConnectionStrings 属性

    public static ConnectionStringSettingsCollection ConnectionStrings { get; } App.config <?xml vers ...

  9. Unique Word Abbreviation

    An abbreviation of a word follows the form <first letter><number><last letter>. Be ...

  10. urllib库认证,代理,cookie

    认证,代理,cookie 1from urllib.request import HTTPBasicAuthHandler, HTTPPasswordMgrWithDefaultRealm, buil ...