結構體排序解pta程式設計題(c++)
7-4 Swan學院社團招新 (20 分)
Swan學院社團招新,招新宣講會分散在不同時間段,大一新生小花花想知道自己最多能完整的參加多少個招新宣講會(參加一個招新宣講會的時候不能中斷或離開)。 【問題說明】這個問題是對幾個相互競爭的招新宣講會活動進行排程,它們都要求以獨佔的方式使用某一公共資源(小花花)。排程的目標是找出一個最大的相互相容的活動集合。 活動選擇問題就是要選擇出一個由互相相容的問題組成的最大子集合。 【溫馨提示】應先將所有的活動按照結束時間升序排列,然後再選擇可能的時間組合,並求出最大的組合數,使用qsort()排序函式是一個不錯的選擇。qsort 的函式原型是: void qsort(voidbase,size_t num,size_t width,int(__cdecl
輸入格式:
第一行為n,表示有n個招新宣講會,接下來n行每行兩個整數表示開始時間和結束時間,由從招新會第一天0點開始的小時數表示(24小時制)。 n <= 1000 。
輸出格式:
最多參加的招聘會個數。
輸入樣例:
在這裡給出一組輸入。例如:
3
9 10
10 20
8 15
輸出樣例:
在這裡給出相應的輸出。例如:
2
作者:這個程式設計師不太冷
#include<iostream>
#include<algorithm>
using namespace std;
struct xx
{
int start;
int end;
int all;
};
int comp(xx &a,xx &b)
{
return a.all<b.all;
}
int main()
{
int t,b[24]={0};
scanf("%d",&t);
xx a[24];
for(int i=1;i<=t;i++)
{
scanf("%d%d",&a[i].start,&a[i].end);
a[i].all=a[i].end-a[i].start;
}
sort(a+1,a+1+t,comp);
int y=1,ans=0;
for(int i=0;i<=t;i++)
{
y=1;
for(int j=a[i].start;j<=a[i].end;j++)
{
if(b[j]!=0)
{
y=0;
break;
}
}
if(y==1)
{
ans++;
for(int j=a[i].start;j<=a[i].end;j++)
{
b[j]=1;
}
}
}
cout<<ans;
return 0;
}