|
Post by huangno1 on Feb 24, 2017 8:53:54 GMT -8
程式說明
中學音樂老師Julio要將N件樂器分配給M位學生,N >= M。為了得到最適當的分配,Julio要求每位學生列出心中理想樂器排名的清單,Julio希望有最多學生能分配到心中理想樂器第一名的樂器,這可能會有 很多種可能的分配方式,Julio想知道共有幾種可能的分配方式。
Input
輸入資料的第一列有一個整數表示測試資料的組數,每組測試資料的第 一列有兩個整數N, M,N表示樂器總數,M表示學生總數,且32 >= N >= M。接下來有M列,每列有N個以空白字元隔開的整數,表示每一位學生對這N個樂器的排名,第一個整數表示對第一項樂器的排名,第二個整數表示對第二項樂器 的排名,以此類推。
Output
請對每組測試資料輸出共有幾種可能的分配方式。
Sample Input
4
10 6
1 2 3 4 5 6 7 8 9 10
4 5 6 7 8 9 10 1 2 3
6 7 8 9 10 1 2 3 4 5
7 8 9 10 1 2 3 4 5 6
9 10 1 2 3 4 5 6 7 8
9 10 3 4 5 6 7 8 1 2
12 4
3 4 5 6 7 8 9 10 1 2 11 12
7 8 9 10 1 2 6 11 12 3 4 5
4 5 6 7 8 9 10 12 1 2 3 11
12 5 6 7 8 9 10 1 2 3 4 11
6 4
2 3 1 4 5 6
2 3 1 4 5 6
6 1 2 3 4 5
5 1 2 3 4 6
2 1
1 2
Sample Output
1
2
4
1
#include <stdio.h>
int main()
{
int T = 0;
scanf("%d", &T);
for (int i=0; i<T; i+=1)
{ int N , M , tmp , j , k ;
int first [ 32 ] = { 0 } , times = 1 ;
scanf ( " %d %d" , &N , &M ) ;
for ( j = 0 ; j < M ; j ++ )
{
for ( k = 0 ; k < N ; k ++ )
{
scanf ( " %d" , &tmp ) ;
if ( tmp == 1 )
first [ k ] += 1 ;
}
}
for ( j = 0 ; j < N ; j ++ )
{
if ( first [ j ] > 0 )
times *= first [ j ] ;
}
printf ( "%d\n" , times ) ;
}
return 0;
}
|
|
|
Post by DaltonaXiow on Dec 10, 2021 6:49:35 GMT -8
|
|
|
Post by DaltonaXiow on Dec 10, 2021 6:50:22 GMT -8
|
|
|
Post by DaltonaXiow on Dec 10, 2021 6:51:37 GMT -8
|
|