Time Limit: 1 second
Memory Limit: 128 MB

【问题描述】

小明要搬家了,大家都来帮忙。
小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼。
最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了。最后大家发现这样混乱地搬运过程效率太低了,于是总结出了提高
效率的方法。
大家的速度都是每分钟上(或下)一层楼。所有向上走的人手中都拿一个箱子,所有向下走的人都不拿箱子。到达第N层立刻放下箱
子向下走,到达第一层立刻拿起箱子向上走。当一个人向上走,另一个向下走而在楼道里相遇时,向上走的人将手中的箱子交
给另一个人,两人同时反向。即原来拿箱子向上走的人不拿箱子向下走,原来不拿箱子向下走的人现拿着箱子向上走。 【数据范围】
对于30%的数据有K≤100,M≤100;
对于60%的数据有K≤1000,M≤109;
对于100%的数据有K≤500000,M≤109

【输入格式】

第一行N(N≤10^9),K(K≤500000),M(M≤10^9)分别表示楼层数、人数、还放在一楼地上的箱子数。
接下来K行,每行两个数Ai,Bi。
Ai表示第i人现在所在的层数,Bi为0或1,为0表示第i人正拿着箱子向上走,为1表示第i人不拿箱子向下走。
输入满足没有任意两人正在同一楼层,在第一层的人一定正拿着箱子向上走,在第N层的人一定正不拿箱子向下走。
【输出格式】

仅包含一个整数,为搬完箱子的时间。

Sample Input

5 2 4
1 0
3 0

Sample Output

20

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t101

【题意】

【题解】

考虑一下两个人相遇的情况;
必然是有一个人拿着一个箱子往上走;另外一个人空着手往下走;
之后他们交换了箱子,然后各自转身;
其实这个过程就相当于一个人能够穿过另外一个人往前走;
根本没有想象的那么复杂;
(拿箱子的人往上走,穿过那个空着手往下走的人;然后那个空着手往下走的人也空着手穿过那个往上走的人;都互相穿过了);
那么也就是说每个人的行动都是独立的;
所以可以一个人一个人地考虑
这个时候我们就可以建立一个一维的坐标了;
考虑从下往上走的人由低到高从左往右放置;
考虑从上往下走的人,严格比往上走的人右,然后从高到低,也是从左往右地放;
然后看看m%k等于多少;
如果为0的话;
则每个人再拿m/k个箱子;
最后到达顶端的人所用的时间就是总时间;
则肯定是坐标轴上最左边的那个人了;
如果m%k不等于0;
就说明箱子不够每个人分一样多;
那么从右往左数m%k个人的范围内每个人都多拿一个箱子;
则取从右往左数第m%k个人;
它肯定是最后到的;
也即由他决定最后的时间;当然此时他要再拿的箱子数为m/k + 1;
然后模拟这个special的人它拿箱子的过程就好,求出最后的时间,也就是答案了.
(程序中的坐标轴我转了个方向,也就是和上面的题解的方向相反了,这样好处理一点,当然坐标轴你要写个排序才能搞出来)

【完整代码】

#include<cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x)typedef pair<int,int> pii;
typedef pair<LL,LL> pll;const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int K = 5e5+100;struct abc
{LL now;int p;
};LL n,m;
int k;
abc ren[K];bool cmp(abc a,abc b)
{if (a.p!=b.p)return a.p > b.p;else{int t = a.p;if (t==0)return a.now > b.now;elsereturn a.now < b.now;}
}int main()
{//freopen("F:\\rush.txt","r",stdin);rel(n),rei(k),rel(m);rep1(i,1,k)rel(ren[i].now),rei(ren[i].p);sort(ren+1,ren+1+k,cmp);LL t = m % k;if (t==0) t = k;abc sp = ren[t];LL need = m/k;if (t!=k) need++;int p = sp.p;LL cost;if (p==0)cost = n-sp.now+n-1;elsecost = sp.now-1;cost += 1LL*(2*(need-1)+1)*(n-1);cout << cost << endl;return 0;
}

【t101】小明搬家相关推荐

  1. NYOJ-49 开心的小明

    开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他 ...

  2. OSChina 周六乱弹 —— 小明和网关超经典的故事~

    2019独角兽企业重金招聘Python工程师标准>>> 周六,又到了瞎扯淡的时间了.周末,约会,男男女女,还有那啥那啥,你们懂得- 男人和女人明显不同,这样才导致了异性相吸吗? 1. ...

  3. CSP 201812-2 小明放学 Python实现+详解

    试题 代码 # 红灯 r 秒,黄灯 y 秒,绿灯 g 秒 r, y, g = [int(i) for i in input().split()]# n表示小明总共经过的道路段数和看到的红绿灯数目 n ...

  4. CSP 201812-1 小明上学 Python实现+详解

    题目 代码 #红灯 r 秒,黄灯 y 秒,绿灯 g 秒 r,y,g = [int(i) for i in input().split()]#n表示小明总共经过的道路段数和看到的红绿灯数目 n = in ...

  5. 胡小明:城市大脑与人脑不同的数据意识

    一.数据应用要区别对待 1.2 数据应用比数据收集重要 大数据热正在席卷全国,许多地方政府都成立大数据局,统管政府的数据资源并将数据收集摆在第一位,数据应用研究却迟迟跟不上,投资不断增长应用效益却无相 ...

  6. asp.net多图片上传案例_会计小明的故事-成本核算案例篇

    因涉及成本核算案例篇,所需要的图表比较多,但是知乎不同于微信可以直接将文档图表复制过来,知乎专栏文章,所有图表必须先截图,然后以图片形式展示.但是成本核算案例图表实在是太多,一一截图,一则影响整体观感 ...

  7. csu 1976: 搬运工小明

    1976: 搬运工小明 Submit Page    Summary    Time Limit: 2 Sec     Memory Limit: 128 Mb     Submitted: 94   ...

  8. [2778]小明的花费预算 (二分查找)SDUT

     小明的花费预算 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 小明终于找到一份工作了,但是老板是个比较奇怪的人,他并不是按 ...

  9. C++编程题,开心的小明

    小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行&quo ...

最新文章

  1. 漫谈“外来的和尚会念经”
  2. 他总在逆风翻盘,绝地反击!最不爱钱却成了最有钱的人...
  3. [云炬创业管理笔记]第三章打造优秀创业团队讨论1
  4. springboot学习笔记1:springboot入门
  5. 关于Django路由层简单笔记
  6. 手机两列布局,正方形
  7. Red Hat 8.0中设置光盘为软件源
  8. [css][移动设备]禁止横竖屏时内容自动调整
  9. ORACLE使用数据泵导入导出部分表
  10. SAP License:税-你知道多少?
  11. 查询各种物流运输信息
  12. tcpip详解卷一_2020高考物理北京卷逐题视频解析+Word版真题
  13. 5.8Gwifi串口服务器、485转wifi多功能串口转WIFI 、232转wifi、Modbus转RTU、工业自动化系统
  14. 2021-09-10ESSM, CVR预估到底要预估什么
  15. 端口汇聚实现多端口带宽叠加
  16. AIDL中should be declared in a file错误
  17. 真实案例,手把手教你构建用户画像
  18. Dreamweaver CS4 快捷键大全
  19. 网络协议系列一 - 基本认识
  20. java JVM 内存结构

热门文章

  1. 一文看尽2020上半年阿里、腾讯、百度入选AI顶会论文
  2. tomcat启动找不到jer报错
  3. 全球365隐私政策服务协议
  4. Vue+Element-UI 上传图片,打开相机,相册
  5. codeforces 957D Riverside Curio
  6. CO-PCA-利润中心会计
  7. 基于麒麟SP10服务器版的Kubernetes集群安装
  8. 一文教你如何快速实现声音识别
  9. 【数据分析与挖掘】天猫超市复购预测实战(含代码和数据集)
  10. 01组团队项目-Alpha冲刺-6/6