看网上说这是贪心算法,姑且就为贪心之求最少区间问题好了;
这俩道题以及会场安排问题算法几乎都一样只要弄通了其中一个就可以了;
1036代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int h1, h2;
}strr;
int cmp( const void *a, const void *b )
{
strr* c = (strr*)a;
strr* d = (strr*)b;
if( c->h2 != d->h2 ) return c->h2 - d->h2;
}
int main()
{
strr str[105];
int a1, a2, a3, a4, t, i;
while( scanf( "%d", &t) == 1 )
{
for( i = 0; i < t; i ++ )
{
scanf( "%d:%d-%d:%d", &a1, &a2, &a3, &a4 );
str[i].h1 = a1*60+a2;
str[i].h2 = a3*60+a4;
if( str[i].h1 > str[i].h2 )
{
int s= str[i].h1;
str[i].h1 = str[i].h2;
str[i].h2 = s;
}
}
qsort( str, t, sizeof(str[0]), cmp );
int v = 1;
int max = str[0].h2;
for( i = 1; i < t; i ++ )
if( max < str[i].h1 )
{
max = str[i].h2;
++v;
}
printf( "%d\n", v );
}
}
891代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int h1, h2;
}strr;
int cmp( const void *a, const void *b )
{
strr* c = (strr*)a;
strr* d = (strr*)b;
if( c->h2 != d->h2 ) return c->h2 - d->h2;
}
int main()
{
strr str[105];
int t, i, max, con;
while( scanf( "%d", &t ) == 1 )
{
for( i = 0; i < t; i++ )
{
scanf( "%d%d", &str[i].h1, &str[i].h2);
if( str[i].h1 > str[i].h2 )
{
int s= str[i].h1;
str[i].h1 = str[i].h2;
str[i].h2 = s;
}
}
qsort( str, t, sizeof(str[0]), cmp );
int v = 1;
int max = str[0].h2;
for( i = 1; i < t; i ++ )
if( max < str[i].h1 )
{
max = str[i].h2;
++v;
}
printf( "%d\n", v );
}
}