【t101】小明搬家
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;
else
return 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;
else
cost = sp.now-1;
cost += 1LL*(2*(need-1)+1)*(n-1);
cout << cost << endl;
return 0;
}
【t101】小明搬家的更多相关文章
- 小明搬家_NOI导刊2010提高(05)
题目描述 小明要搬家了,大家都来帮忙. 小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼. 最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了.最后大家发现这样混乱地搬运过程效率太低了,于是 ...
- 小明的密码-初级DP解法
#include #include #include using namespace std; int visited[5][20][9009];// 访问情况 int dp[5][20][9009] ...
- 小明系列问题――小明序列(LIS)
小明系列问题――小明序列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- ACM 擅长排列的小明
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...
- ACM 懒省事的小明
懒省事的小明 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种 ...
- 管闲事的小明-nyoj51
描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种有一棵 ...
- HDU2096 小明A+B
入门级都没到的水题!看到顺便就做了,AC记录喜+1 Description 小明今年3岁了, 现在他已经能够认识100以内的非负整数, 并且能够进行100以内的非负整数的加法计算. 对于大于等于100 ...
- 小明A+B[HDU2096]
小明A+B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- nyist 676 小明的求助
http://acm.nyist.net/JudgeOnline/problem.php?pid=676 小明的求助 时间限制:2000 ms | 内存限制:65535 KB 难度:2 描述 ...
随机推荐
- 【Educational Codeforces Round 33 B】Beautiful Divisors
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把所有的那些数字打表出来. 逆序枚举就好 [代码] /* 1.Shoud it use long long ? 2.Have you ...
- Qt学习 之 Socket通信
近期写大作业用到Qt的Socket部分.网上关于这部分的资料都太过复杂,如今总结一下一些简单的应用.有机会能够给大家讲讲用Socket传送文件的代码. 这里主要解说怎样实现TCP和UDP的简单通信. ...
- JIRA6.3.6 安装汉化破解指南
JIRA6.3.6 安装汉化破解指南 近期试着安装了下JIRA,碰到了些问题.特记录下来,供后来者使用: 1.常规安装 1.1. 下载并安装jira 从官网下载atlassian-jira-6.3.6 ...
- ajax日期參数格式问题
今天遇到ajax传输日期參数后台无法识别的问题,错误异常例如以下. 从异常中能够看出传输到后台的日期数据格式为Thu Aug 13 2015 19:45:20 GMT+0800 (中国标准时间),这样 ...
- amazeui页面分析2
amazeui页面分析2 一.总结 1.弄清结构:这些部分都是一块一块分好了的,掌握结构之后,想替换哪块就替换哪块,想不要哪块就不要哪块,非常简单的 2.一块一块:替换十分简单 3.弄清楚大块之后,然 ...
- vue项目实现导出数据到excel
实现导出功能分两种,一种是客户端拿到数据做导出,第二种是服务器端处理好,返回一个数据流实现导出 第一种网上很容易找到,也很好用,本文要说的是第二种. fetchExport({ id: this.so ...
- 【Codeforces Round #437 (Div. 2) C】 Ordering Pizza
[链接]h在这里写链接 [题意] 给你参赛者的数量以及一个整数S表示每块披萨的片数. 每个参数者有3个参数,si,ai,bi; 表示第i个参赛者它要吃的披萨的片数,以及吃一片第 ...
- 【BZOJ 3238】[Ahoi2013]差异
[链接]h在这里写链接 [题意] 还有更简洁的题目描述吗/xk [题解] 对于lenti+lentj这一部分,比较好处理. 可以弄一个前缀和. 然后O(N)扫描一遍. ...
- php实现变态跳台阶(记忆化递归)
php实现变态跳台阶(记忆化递归) 一.总结 1.本题思路(分类讨论思路,注意初始值和边界值):第一步如果1,那剩下的就是jumpFloorII($number-1)(下面jumpFloorII以j表 ...
- 算法求解中的变量、数组与数据结构(STL 中的容器)
本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...