Wooden Sticks
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 19672 Accepted Submission(s): 7991
(a) The setup time for the first wooden stick is 1 minute.
(b) Right after processing a stick of length l and weight w , the machine will need no setup time for a stick of length l' and weight w' if l<=l' and w<=w'. Otherwise, it will need 1 minute for setup.
You are to find the minimum setup time to process a given pile of n wooden sticks. For example, if you have five sticks whose pairs of length and weight are (4,9), (5,2), (2,1), (3,5), and (1,4), then the minimum setup time should be 2 minutes since there is a sequence of pairs (1,4), (3,5), (4,9), (2,1), (5,2).
5
4 9 5 2 2 1 3 5 1 4
3
2 2 1 1 2 2
3
1 3 2 2 3 1
1
3
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef struct wood {
int l;
int w;
}Wood;
int compare(const void * p1, const void * p2) {
Wood * a1 = (Wood *)p1;
Wood * a2 = (Wood *)p2;
if (a1->l != a2->l)
return a1->l - a2->l;
else
return a1->w - a2->w;
}
int main(void)
{
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
Wood sticks[];
bool vis[] = { };
for (int i = ; i < n; i++) {
scanf("%d %d", &sticks[i].l, &sticks[i].w);
}
qsort(sticks, n, sizeof(sticks[]), compare);
int time = ;
for (int i = ; i < n; i++) {
if (vis[i])
continue;
int curw = sticks[i].w;
for (int j = i + ; j < n; j++) {
if (!vis[j] && sticks[j].w >= curw) {
curw = sticks[j].w;
vis[j] = ;
}
}
time++;
}
printf("%d\n", time);
}
return 0;
}