【二分】【动态规划】Codeforces Round #393 (Div. 1) B. Travel Card
2017-01-23 09:30
369 查看
水dp,加个二分就行,自己看代码。
B. Travel Card
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
A new innovative ticketing systems for public transport is introduced in Bytesburg. Now there is a single travel card for all transport. To make a trip a passenger scan his card and then he is charged according to the fare.
The fare is constructed in the following manner. There are three types of tickets:
a ticket for one trip costs 20 byteland rubles,
a ticket for 90 minutes costs 50 byteland rubles,
a ticket for one day (1440 minutes) costs 120 byteland rubles.
Note that a ticket for x minutes activated at time t can be used for trips started in time range from t to t + x - 1, inclusive. Assume that all trips take exactly one minute.
To simplify the choice for the passenger, the system automatically chooses the optimal tickets. After each trip starts, the system analyses all the previous trips and the current trip and chooses a set of tickets for these trips with a minimum total cost. Let the minimum total cost of tickets to cover all trips from the first to the current is a, and the total sum charged before is b. Then the system charges the passenger the sum a - b.
You have to write a program that, for given trips made by a passenger, calculates the sum the passenger is charged after each trip.
Input
The first line of input contains integer number n (1 ≤ n ≤ 105) — the number of trips made by passenger.
Each of the following n lines contains the time of trip ti (0 ≤ ti ≤ 109), measured in minutes from the time of starting the system. All ti are different, given in ascending order, i. e. ti + 1 > ti holds for all 1 ≤ i < n.
Output
Output n integers. For each trip, print the sum the passenger is charged after it.
Examples
input
output
input
output
Note
In the first example, the system works as follows: for the first and second trips it is cheaper to pay for two one-trip tickets, so each time 20 rubles is charged, after the third trip the system understands that it would be cheaper to buy a ticket for 90 minutes. This ticket costs 50rubles, and the passenger had already paid 40 rubles, so it is necessary to charge 10rubles only.
B. Travel Card
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
A new innovative ticketing systems for public transport is introduced in Bytesburg. Now there is a single travel card for all transport. To make a trip a passenger scan his card and then he is charged according to the fare.
The fare is constructed in the following manner. There are three types of tickets:
a ticket for one trip costs 20 byteland rubles,
a ticket for 90 minutes costs 50 byteland rubles,
a ticket for one day (1440 minutes) costs 120 byteland rubles.
Note that a ticket for x minutes activated at time t can be used for trips started in time range from t to t + x - 1, inclusive. Assume that all trips take exactly one minute.
To simplify the choice for the passenger, the system automatically chooses the optimal tickets. After each trip starts, the system analyses all the previous trips and the current trip and chooses a set of tickets for these trips with a minimum total cost. Let the minimum total cost of tickets to cover all trips from the first to the current is a, and the total sum charged before is b. Then the system charges the passenger the sum a - b.
You have to write a program that, for given trips made by a passenger, calculates the sum the passenger is charged after each trip.
Input
The first line of input contains integer number n (1 ≤ n ≤ 105) — the number of trips made by passenger.
Each of the following n lines contains the time of trip ti (0 ≤ ti ≤ 109), measured in minutes from the time of starting the system. All ti are different, given in ascending order, i. e. ti + 1 > ti holds for all 1 ≤ i < n.
Output
Output n integers. For each trip, print the sum the passenger is charged after it.
Examples
input
3 10 20 30
output
20 20 10
input
10 13 45 46 60 103 115 126 150 256 516
output
20 20 10
0
20
0
0
20 20 10
Note
In the first example, the system works as follows: for the first and second trips it is cheaper to pay for two one-trip tickets, so each time 20 rubles is charged, after the third trip the system understands that it would be cheaper to buy a ticket for 90 minutes. This ticket costs 50rubles, and the passenger had already paid 40 rubles, so it is necessary to charge 10rubles only.
#include<cstdio> #include<algorithm> using namespace std; int n,a[100010],f[100010]; int main() { freopen("b.in","r",stdin); scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]); for(int i=1;i<=n;++i) { f[i]=f[i-1]+20; int *p=lower_bound(a+1,a+n+1,a[i]-89); f[i]=min(f[i],f[p-a-1]+50); p=lower_bound(a+1,a+n+1,a[i]-1439); f[i]=min(f[i],f[p-a-1]+120); printf("%d\n",f[i]-f[i-1]); } return 0; }
相关文章推荐
- [AGC007E]Shik and Travel-动态规划-二分答案
- Codeforces Round #393 (Div. 2)-D. Travel Card(dp)
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 831D) - 贪心 - 二分答案 - 动态规划
- Codeforces Round #393 (Div. 2) D题Travel Card(map,dp)解题报告
- SRM 658 DIV1 650 二分答案 动态规划
- Codeforces Round #211 (Div. 2)-D. Renting Bikes,二分!感谢队友出思路!
- Codeforces Round #321 (Div. 2) Kefa and Company 二分
- Codeforces Round #404 (Div. 2) C 二分查找
- Codeforces Round #211 (Div. 2)D. Renting Bikes(二分,想法题,好题)
- Codeforces#354C (Div. 2) 二分答案
- codeforce 359D 二分+ 动态规划(sparse table)
- Codeforces Round #388 (Div. 2)D. Leaving Auction(二分+思维)
- Codeforces Round #341 (Div. 2) C. Mike and Chocolate Thieves 二分
- Codeforces Round #361 (Div. 2) C 二分
- 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)
- 【动态规划】【二分】【最长不下降子序列】洛谷 P1020 导弹拦截
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) 二分答案 + 网络流
- Codeforces Round #327 (Div. 1) B. Chip 'n Dale Rescue Rangers 二分
- Codeforces Round #316 (Div. 2) D. Tree Requests(DFS序+BFS+二分)
- Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分