Skip to main content
  1. Posts/

BZOJ 1689: [Usaco2005 Open] Muddy roads 泥泞的路 (模拟)

·2 mins
Table of Contents
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

1689: [Usaco2005 Open] Muddy roads 泥泞的路
#

Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 311  Solved: 227 [Submit][Status][Discuss]

Description
#

Farmer John has a problem: the dirt road from his farm to town has suffered in the recent rainstorms and now contains (1 <= N <= 10,000) mud pools. Farmer John has a collection of wooden planks of length L that he can use to bridge these mud pools. He can overlap planks and the ends do not need to be anchored on the ground. However, he must cover each pool completely. Given the mud pools, help FJ figure out the minimum number of planks he needs in order to completely cover all the mud pools.

    牧场里下了一场暴雨,泥泞道路上出现了许多水坑,约翰想用一批长度为L的木板将这些水坑盖住.    牧场里的道路可以看成一根数轴,每个水坑可以用数轴上的两个坐标表示,如(3,6)表示从3到6有一个长度为3的水坑.所有的水坑都是不重叠的,(3,6)和(6,9)可以出现在同一个输入数据中,因为它们是两个连续的水坑,但不重叠.

    请你帮助约翰计算最少要用多少块木板才能将所有水坑盖住

Input
#

  • Line 1: Two space-separated integers: N and L * Lines 2..N+1: Line i+1 contains two space-separated integers: s_i and e_i (0 <= s_i < e_i <= 1,000,000,000) that specify the start and end points of a mud pool along the road. The mud pools will not overlap. These numbers specify points, so a mud pool from 35 to 39 can be covered by a single board of length 4. Mud pools at (3,6) and (6,9) are not considered to overlap.

    第1行有二个用空格隔开的整数N和L.其中1≤N≤10000,表示水坑总数.L为木板长度.

接下来的N行每行有二个用整数si和ei(0≤si<ei≤109),表示一个水坑的两个坐标.

Output
#

  • Line 1: The miminum number of planks FJ needs to use.

    一个整数,表示约翰盖住所有水坑最少要用多少块长为L的木板.

Sample Input
#

3 3 1 6 13 17 8 12

Sample Output
#

5

HINT
#

Source
#

Silver

注意区间是左开右闭。

 1/* ***********************************************
 2Author :111qqz
 3Created Time :2016年05月10日 星期二 21时00分28秒
 4File Name :code/bzoj/1689.cpp
 5************************************************ */
 6
 7#include <cstdio>
 8#include <cstring>
 9#include <iostream>
10#include <algorithm>
11#include <vector>
12#include <queue>
13#include <set>
14#include <map>
15#include <string>
16#include <cmath>
17#include <cstdlib>
18#include <ctime>
19#define fst first
20#define sec second
21#define lson l,m,rt<<1
22#define rson m+1,r,rt<<1|1
23#define ms(a,x) memset(a,x,sizeof(a))
24typedef long long LL;
25#define pi pair < int ,int >
26#define MP make_pair
27
28using namespace std;
29const double eps = 1E-8;
30const int dx4[4]={1,0,0,-1};
31const int dy4[4]={0,-1,1,0};
32const int inf = 0x3f3f3f3f;
33const int N=1E4+76;
34int n;
35pi a[N];
36int L;
37int main()
38{
39	#ifndef  ONLINE_JUDGE
40	freopen("code/in.txt","r",stdin);
41  #endif
42	scanf("%d%d",&n,&L);
43	for ( int i = 1 ; i <= n ; i++) scanf("%d %d",&a[i].fst,&a[i].sec),a[i].sec--;
44	sort(a+1,a+n+1);
45
46	int ans = 0;
47	int lst = a[1].fst-1;
48	int num = (a[1].sec-lst+L-1)/L;
49
50	ans +=num;
51	lst = lst+num*L;
52	for ( int i = 2 ; i <= n ; i++)
53	{
54	  //   cout<<"ans:"<<ans<<" lst:"<<lst<<endl;
55	     if (a[i].sec<=lst) continue;
56	     if (a[i].fst>lst) lst = a[i].fst-1;
57	     num = (a[i].sec-lst+L-1)/L;
58	     ans +=num;
59	     lst = lst + num*L;
60	}
61
62	printf("%d\n",ans);
63
64
65
66
67  #ifndef ONLINE_JUDGE
68  fclose(stdin);
69  #endif
70    return 0;
71}

Related

bzoj1603: [Usaco2008 Oct]打谷机 (纱布题)

·2 mins
# Time Limit: 5 Sec Memory Limit: 64 MB Submit: 774 Solved: 593 [Submit][Status][Discuss] Description # Farmer John有一个过时的打谷机(收割小麦),它需要带子来带动。发动机驱动轮1总是顺时针旋转的,用来带动转轮2,转轮2来带动转轮3,等等。一共有n(2<=n<=1000)个转轮(n-1条带子)。上面的图解描述了转轮的两种连接方式,第一种方式使得两个轮子旋转的方向相同,第二种则相反。 给出一串带子的信息: *Si—驱动轮 *Di—被动轮 *Ci—连接的类型(0=直接连接,1=交叉连接) 不幸的是,列出的信息是随即的。 作为样例,考虑上面的图解,n=4,转轮1是驱动轮,可以得知最后转轮4是逆时针旋转的。

hdu 5611 || BC #69 div2 1002 Baby Ming and phone number

·2 mins
http://acm.hdu.edu.cn/showproblem.php?pid=5611 题意:给出n个电话号码(长度为11的字符串),满足特殊条件的价格为a,否则为b.特殊条件为最后5位数字一样,最后5位严格递增或者严格递减,最后8位是一个1980年1月一日到2016年12月31日的合法日期。问最后的价值。

cf 611 A||codeforces goodbye 2015 C. New Year and Domino

·1 min
http://codeforces.com/contest/611/problem/C 题意:给出一个n*m的地图,.表示可以空,#表示墙。一个东西需要占两个相邻的格子,问给定一个矩形,放一个东西的方案数。 思路:q很大。。应该是先预处理出来直接调用答案。。。计数问题累加性。。应该是前缀和之类。。需要做的就是怎么标记。。我的做法是竖着放和横着放的个数分开来存。从左往右从上往下,每次标记到后一个点。然后二维的前缀和。然后每次询问的时候,去掉最上边和最左边两条边界上对应的多加的点。

codeforces 31 C. Schedule

·2 mins
http://codeforces.com/problemset/problem/31/C 题意:给出n个借用教室的时间安排,可能会有冲突。要求恰好去掉一个时间安排使得剩下的时间安排不冲突。问多多少种方案。 思路:首先一个直觉是。。除非初始就没有任何冲突。。不然这个答案不会很大。。

codeforces 1 B. Spreadsheets

·2 mins
http://codeforces.com/problemset/problem/1/B 题意:给出了两种表格的表示方法。要求互相转化。 思路:直接模拟即可。注意和一般的进制转化不同的是,26进制对应的是1到26而不是0到25,所以要记得处理下借位。