USACO Section 1.3 Barn Repair

1)正难则反,考虑把空隙弄到最大,即找出前M-1个最大的空隙

2)数据输入时,虽然M最大为20,但保留空隙的数组要开大(针对sort而言)

3)有可能M>C,这时,要取C-1作为空隙选取的个数上界

 

/*
	ID:linyvxi1
	PROB:barn1
	LANG:C++
*/
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
int min(int a,int b)
{
	return a<b?a:b;
}
bool cmp(int a,int b)
{
	return a>b;
}

int main()
{
	int M,S,C;
	int arr[205],arr_blank[205];

	FILE*	fin=fopen("barn1.in","r");
	FILE*	fout=fopen("barn1.out","w");
//	scanf("%d%d%d",&M,&S,&C);
	fscanf(fin,"%d%d%d",&M,&S,&C);
	int i;
	for(i=0;i<C;i++){
		fscanf(fin,"%d",&arr[i]);
	}
	sort(arr,arr+C);
	int j=0;
	for(i=1;i<C;i++){
		arr_blank[j]=arr[i]-arr[i-1]-1;
		j++;
	}
	sort(arr_blank,arr_blank+C-1,cmp);
	//slect the min M-1th
	int sum=0;
	for(i=0;i<min(M-1,C-1);i++)
		sum+=arr_blank[i];
	fprintf(fout,"%d\n",arr[C-1]-arr[0]+1-sum);
	//printf("%d\n",arr_blank[0]);
//	system("PAUSE");
	//fprintf(fout,"%d\n",arr[C-1]-arr[0]-sum);
}

  

Here are the test data inputs:

------- test 1 ----
4 50 17
3
4
6
8
14
15
16
17
25
26
27
30
31
40
41
42
43
------- test 2 ----
2 10 4
2
4
6
8
------- test 3 ----
3 27 16
2
3
5
6
8
9
10
13
14
15
16
19
20
21
22
27
------- test 4 ----
1 200 8
101
105
102
106
103
107
104
99
------- test 5 ----
50 200 10
18
69
195
38
73
28
6
172
53
99
------- test 6 ----
50 30 6
30
25
20
15
10
5
------- test 7 ----
20 200 80
65
178
64
70
18
32
88
90
98
20
152
31
118
117
127
81
175
73
136
161
165
63
130
133
190
10
4
138
200
43
189
37
86
182
145
110
67
126
114
153
99
25
155
119
176
55
48
197
62
147
125
60
12
23
112
96
27
122
35
50
36
49
149
108
100
188
77
191
6
121
166
132
82
95
150
89
22
40
128
56
------- test 8 ----
4 200 100
72
180
46
198
196
131
165
112
52
133
187
93
57
35
128
65
127
130
12
49
88
155
122
193
101
164
98
143
54
149
38
84
45
139
79
16
102
20
14
150
188
33
176
135
29
80
19
74
11
114
95
185
137
59
32
189
66
67
191
91
77
134
18
10
7
200
8
13
55
24
142
184
17
6
109
105
43
181
85
94
151
160
115
25
116
111
37
104
144
97
90
141
120
119
152
182
123
172
40
23
------- test 9 ----
20 195 100
1
2
3
4
5
11
12
13
14
15
21
22
23
24
25
31
32
33
34
35
41
42
43
44
45
51
52
53
54
55
61
62
63
64
65
71
72
73
74
75
81
82
83
84
85
91
92
93
94
95
101
102
103
104
105
111
112
113
114
115
121
122
123
124
125
131
132
133
134
135
141
142
143
144
145
151
152
153
154
155
161
162
163
164
165
171
172
173
174
175
181
182
183
184
185
191
192
193
194
195
------- test 10 ----
1 200 2
1
200
posted @ 2011-10-30 20:12  linyvxiang  阅读(180)  评论(0编辑  收藏  举报