トピック:https://www.acwing.com/problem/content/description/229/
質問の意味:多くの部分がありますが、生産時間の各部分を持って、求める曜日及び各ワーカーの生産部品の完了の日付の製造日の数週間はありますが、今は何を知っている、3-9間の日であります各メンバーの特定の製造日
アイデア:まず、二週間によると、私たちが実際に特定の時間を計算することができ、その後、我々は部品の数を生成するために、各ワーカーは、まだ時間があり、私たちは、私たちが排除を得ることができ、非常に多くの方程式と同等のものを構築することができます答え
治療内容の3-9日間の範囲でできることに注意してください
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #define N 305 チャー日[] [ 20 ] = { "" 、" MON "、" 火"、" WED "、" THU "、" FRI "、" SAT "、" SUN " }。 INTのN、M、K、マット[N] [N]、ANS [N]。 int型の GCD(int型、 ) を返します。 他の リターン GCD(B、%のB)。 } BOOL mul_solu。 BOOLガウス(int型のマット[N] [N]、int型 M、int型N) { mul_solu = 偽。 int型の行、COL。 用(行= 0、COL = 0 ;行<M && COL <N ++行、++ COL) { int型、P = 行。 用(INT J =行+ 1 <; ++ M J J) であれば(ABS(マット[J] [COL])>ABS(MAT [P] [COL])) P = J; IF!(P = 行) { ため(INT J = 0 ; J <= N-; ++ J) スワップ(MAT [行] [J]、MAT [P] [J]); } IF(MAT [行] [COL] == 0)// 最大この列は、以下の説明0が全て0である { 行 - ; 続行; } ため(INT J = +行1。 ; J <M; ++ J) { int型 GG =GCD(マット[行] [COL]、マット[J] [COL])。 INT MULI =マット[J] [COL] / GG%7 。 INT mulj =マット[行] [COL] / GG%7 。 用(int型 K = COL; K <= N; ++ K) { マット[J] [K] =マット[J] [K] * muljマット[行] [K] * MULI。 マット[J] [K] =(マット[J] [K]%7 + 7)%7 。 } } } のための(int型 ;私がm <++ I I =行)// 矛盾必须先与複数判断 する場合(マット[I] [N]) 返す 偽; もし(行<N)// 自由変数少 { mul_solu = 真。 返す 真; } のために(int型 I = N- 1、I> = 0 ; - I) { ブールフラグ= 偽。 用(INT J = 3、J <= 9 ; ++ j)は { int型 RR = 0 。 用(int型 kは= I + 1; ++; N <K K) RRマット* + =マット[K] [N] [i]と[K]%7、= RRの%7 。 RR + = jは*のマット[i]は[I]; もし(RR%7 ==のマット[I] [N]) { マット[I] [N] = J。 フラグ = 真。 破ります; } } もし(!フラグ) を返す 偽。 } を返す 真。 } int型 GET_TIME(CHAR* T1、チャー *のT2) { int型ST、編。 以下のために(int型 i = 1 ; iが<= 7 ; ++ I) { 場合(のstrcmp(T1、日[I])== 0 ) 、ST = I。 もし(のstrcmp(T2、日[I])== 0 ) ED = I。 } であれば(ED-ST> = 0 ) 戻り ED-ST + 1 。 それ以外の 戻り編+ 8 - ST; } チャーT1 [ 10 ]、T2 [ 10 ]。 int型のTT; INT メイン() { 一方(のscanf(" %d個の%のD "、&N、&M)=!EOF) { 場合(N == 0 && m個の== 0)ブレーク。 memset(マット、0、はsizeof (マット))。 以下のために(int型 i = 0 ; iがmを<; ++ I) { scanf関数(" %D%S%S "、&K、T1、T2)。 マット[I] [N] = GET_TIME(T1、T2)%7 ; 用(INT J = 1 ; J <= K; ++ j)は { scanf関数(" %のD "、およびTT); マット[i]は[TT - 1 ] ++ ; マット[I] [TT - 1 ]%= 7 。 } } もし(ガウス(マット、M、N)) { 場合(mul_solu) { のprintf(" 複数のソリューション\ N。" ); } 他 { ため(int型 i = 0 ; iはN- < 1 ++; I) (printfの" %dを" [I] [n]は、マット)。 printf(" %d個の\ n "、マット[N- 1 ] [N])。 } } 他のprintf(" 一貫性のないデータ\ n " ); } 戻り 0 。 }