Google Code Jam 2010 Round 1B Problem B. Picking Up Chicks
Problem
A flock of chickens are running east along a straight, narrow road. Each one is running with its own constant speed. Whenever a chick catches up to the one in front of it, it has to slow down and follow at the speed of the other chick. You are in a mobile crane behind the flock, chasing the chicks towards the barn at the end of the road. The arm of the crane allows you to pick up any chick momentarily, let the chick behind it pass underneath and place the picked up chick back down. This operation takes no time and can only be performed on a pair of chicks that are immediately next to each other, even if 3 or more chicks are in a row, one after the other.
Given the initial locations (Xi) at time 0 and natural speeds (Vi) of the chicks, as well as the location of the barn (B), what is the minimum number of swaps you need to perform with your crane in order to have at least K of the N chicks arrive at the barn no later than time T?
You may think of the chicks as points moving along a line. Even if 3 or more chicks are at the same location, next to each other, picking up one of them will only let one of the other two pass through. Any swap is instantaneous, which means that you may perform multiple swaps at the same time, but each one will count as a separate swap.
Input
The first line of the input gives the number of test cases, C. C test cases follow. Each test case starts with 4 integers on a line -- N, K, B and T. The next line contains the Ndifferent integers Xi, in increasing order. The line after that contains the N integers Vi. All distances are in meters; all speeds are in meters per second; all times are in seconds.
Output
For each test case, output one line containing "Case #x: S", where x is the case number (starting from 1) and S is the smallest number of required swaps, or the word "IMPOSSIBLE".
Limits
1 ≤ C ≤ 100;
1 ≤ B ≤ 1,000,000,000;
1 ≤ T ≤ 1,000;
0 ≤ Xi < B;
1 ≤ Vi ≤ 100;
All the Xi's will be distinct and in increasing order.
Small dataset
1 ≤ N ≤ 10;
0 ≤ K ≤ min(3, N);
Large dataset
1 ≤ N ≤ 50;
0 ≤ K ≤ N;
Sample
| Input |
Output |
3 |
Case #1: 0 |
Solution
vector<int>X;
vector<int>V;
vector<pair<int, int>>ck; int solve(int N, int K, int B, int T1)
{
int sw = ;
int slow = ;
for (int i = N - ; i >= ; i--) {
if (ck[i].first + T1 * ck[i].second >= B) {
K--;
sw += slow; if (!K)
break; } else {
slow++;
}
} if (K)
return -; return sw;
} int main()
{
freopen("in.in", "r", stdin);
if (WRITE_OUT_FILE)
freopen("out.out", "w", stdout); int T;
scanf("%d\n", &T);
if (!T) {
cerr << "Check input!" << endl;
exit();
} for (int t = ; t <= T; t++) {
if (WRITE_OUT_FILE)
cerr << "Solving: #" << t << " / " << T << endl; int N, K, B, T1;
scanf("%d %d %d %d\n", &N, &K, &B, &T1); X.clear();
V.clear();
ck.clear(); for (int i = ; i < N; i++) {
int x;
scanf("%d", &x); X.push_back(x);
} for (int i = ; i < N; i++) {
int v;
scanf("%d", &v); V.push_back(v);
} for (int i = ; i < N; i++) {
ck.push_back(pair<int, int>(X[i], V[i]));
} sort(ck.begin(), ck.end()); auto result = solve(N, K, B, T1); if (result >= ) {
printf("Case #%d: %d\n", t, result);
} else {
printf("Case #%d: IMPOSSIBLE\n", t);
} } fclose(stdin);
if (WRITE_OUT_FILE)
fclose(stdout); return ;
}
Google Code Jam 2010 Round 1B Problem B. Picking Up Chicks的更多相关文章
- Google Code Jam 2010 Round 1B Problem A. File Fix-it
https://code.google.com/codejam/contest/635101/dashboard#s=p0 Problem On Unix computers, data is s ...
- Google Code Jam 2010 Round 1C Problem A. Rope Intranet
Google Code Jam 2010 Round 1C Problem A. Rope Intranet https://code.google.com/codejam/contest/61910 ...
- Google Code Jam 2010 Round 1C Problem B. Load Testing
https://code.google.com/codejam/contest/619102/dashboard#s=p1&a=1 Problem Now that you have won ...
- Google Code Jam 2010 Round 1A Problem A. Rotate
https://code.google.com/codejam/contest/544101/dashboard#s=p0 Problem In the exciting game of Jo ...
- Google Code Jam 2016 Round 1B Problem C. Technobabble
题目链接:https://code.google.com/codejam/contest/11254486/dashboard#s=p2 大意是教授的学生每个人在纸条上写一个自己的topic,每个to ...
- Google Code Jam 2014 Round 1B Problem B
二进制数位DP,涉及到数字的按位与操作. 查看官方解题报告 #include <cstdio> #include <cstdlib> #include <cstring& ...
- dp - Google Code jam Qualification Round 2015 --- Problem B. Infinite House of Pancakes
Problem B. Infinite House of Pancakes Problem's Link: https://code.google.com/codejam/contest/6224 ...
- Google Code jam Qualification Round 2015 --- Problem A. Standing Ovation
Problem A. Standing Ovation Problem's Link: https://code.google.com/codejam/contest/6224486/dashbo ...
- Google Code Jam 2016 Round 1B B
题意:给出两个数字位数相同,分别中间有若干位不知道,用问号表示.现在要求补全这两个数字,使得差值的绝对值最小,多解则取第一个数字的值最小的,再多解就取第二个数字最小的. 分析: 类似数位dp,但是很多 ...
随机推荐
- 试试markdown
看看有没有wrapper... list first list second list third list fourth list in list 1 list list list > < ...
- excel中如何批量将所有的网址设为超链接
首先如果数据较少的话,只需要双击鼠标左键,回车,就会自动转换成超链接. 转自: http://zhidao.baidu.com/question/200363361.html?qbl=relate_q ...
- 【Hadoop】史上最全 Hadoop 生态 全景图
- Counting Bits
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the ...
- iOS 用CALayer实现动画
与动画有关的几个类的继承关系 涉及到动画的类主要有6个,看一下它们的基本用途: 1. CAAnimation 动画基类 2. CAAnimationGroup 组合多个动画 3. CAPropert ...
- Extjs给gridPanel添加单价双击事件和获取当前行的数据
有两个小属性,如下 this.on('rowdblclick', this.readContent, this); this.on('cellclick', this.gridCellClick, t ...
- 【wireshark】打开后显示There are no interfaces on which a capture can be done
解决方式:用管理员方式打开wireshark即可
- chrome 插件
SwitchySharp.crx SwitchyOmega.crx Readability_v3.0.15.crx Hackman.crx EditThisCookie_v1.4.1.crx AdBl ...
- 天使之城(codevs 2821)
2821 天使之城 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 天使城有一个火车站,每辆火车 ...
- Android中mesure过程详解
我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...