結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
![]() |
提出日時 | 2019-02-05 13:40:36 |
言語 | C (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 40 ms / 2,000 ms |
コード長 | 4,678 bytes |
コンパイル時間 | 854 ms |
コンパイル使用メモリ | 29,304 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2025-01-02 23:38:33 |
合計ジャッジ時間 | 1,780 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
コンパイルメッセージ
main.c: In function ‘fMain’: main.c:135:9: warning: ignoring return value of ‘fgets’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 135 | fgets(lc1Buf, sizeof(lc1Buf), szpFpI); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ main.c:140:9: warning: ignoring return value of ‘fgets’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 140 | fgets(lc1Buf, sizeof(lc1Buf), szpFpI); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ main.c:146:17: warning: ignoring return value of ‘fscanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 146 | fscanf(szpFpI, "%d", &liGVal[i]); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ main.c:151:9: warning: ignoring return value of ‘fgets’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 151 | fgets(lc1Buf, sizeof(lc1Buf), szpFpI); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ main.c:155:9: warning: ignoring return value of ‘fgets’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 155 | fgets(lc1Buf, sizeof(lc1Buf), szpFpI); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ main.c:171:17: warning: ignoring return value of ‘fscanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 171 | fscanf(szpFpI, "%d", &liMVal); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ main.c:176:9: warning: ignoring return value of ‘fgets’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 176 | fgets(lc1Buf, sizeof(lc1Buf), szpFpI); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ main.c:181:17: warning: ignoring return value of ‘fscanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 181 | fscanf(szpFpI, "%d", &liNCnt); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ main.c:186:25: warning: ignoring return value of ‘fscanf’ decla
ソースコード
#include <float.h>#include <limits.h>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>// 内部定数#define D_ON 1 // 汎用フラグ - ON#define D_OFF 0 // 汎用フラグ - OFF#define D_VTX_MAX 105 // 最大頂点数// 内部構造体 - 頂点情報typedef struct Vtx {int mi1Cap[D_VTX_MAX]; // 容量[接続先頂点]int miDone; // 処理済フラグ} Vtx;// 内部変数static FILE *szpFpI; // 入力static Vtx sz1Vtx[D_VTX_MAX]; // 頂点 [0]:開始 [1~GCnt]:原画 [GCnt+1~GCnt+MCnt]:作画 [GCnt+MCnt+1]:終了static int siVCnt; // 頂点数// 内部変数 - テスト用#ifdef D_TESTstatic int siRes;static FILE *szpFpA;#endif// 最大流 - 取得 - 1フローintfGetMaxFlowOne(int piVSNo // <I> 始点, int piVENo // <I> 終点, int piFlow // <I> 流量){int i;// 処理済フラグif (sz1Vtx[piVSNo].miDone != D_OFF) {return 0;}sz1Vtx[piVSNo].miDone = D_ON;// 到着チェックif (piVSNo == piVENo) {return piFlow;}// 移動for (i = 0; i < siVCnt; i++) {// 流量int liFlow = sz1Vtx[piVSNo].mi1Cap[i];if (liFlow < 1) { // なしcontinue;}if (liFlow > piFlow) {liFlow = piFlow;}// 下位へliFlow = fGetMaxFlowOne(i, piVENo, liFlow);if (liFlow < 1) { // なしcontinue;}// 流量 - 加算・減算sz1Vtx[piVSNo].mi1Cap[i] -= liFlow;sz1Vtx[i].mi1Cap[piVSNo] += liFlow;return liFlow;}return 0;}// 最大流 - 取得intfGetMaxFlow(int piVSNo // <I> 始点, int piVENo // <I> 終点){int i;int liSum = 0;while (1) {// 処理済フラグ - 初期化for (i = 0; i < siVCnt; i++) {sz1Vtx[i].miDone = D_OFF;}// 1フロー - 取得int liFlow = fGetMaxFlowOne(piVSNo, piVENo, INT_MAX);if (liFlow < 1) { // なしbreak;}// 流量 - 加算liSum += liFlow;}return liSum;}// 実行メインintfMain(int piTNo // <I> テスト番号 1~){int i, j;char lc1Buf[1024], lc1Out[1024];// データ - 初期化memset(sz1Vtx, 0, sizeof(sz1Vtx)); // 頂点// 入力 - セット#ifdef D_TESTsprintf(lc1Buf, ".\\Test\\T%d.txt", piTNo);szpFpI = fopen(lc1Buf, "r");sprintf(lc1Buf, ".\\Test\\A%d.txt", piTNo);szpFpA = fopen(lc1Buf, "r");siRes = 0;#elseszpFpI = stdin;#endif// カット数 - 取得int liCCnt;fgets(lc1Buf, sizeof(lc1Buf), szpFpI);sscanf(lc1Buf, "%d", &liCCnt);// 原画数 - 取得int liGCnt;fgets(lc1Buf, sizeof(lc1Buf), szpFpI);sscanf(lc1Buf, "%d", &liGCnt);// 原画 - 取得int liGVal[D_VTX_MAX];for (i = 0; i < liGCnt; i++) {fscanf(szpFpI, "%d", &liGVal[i]);// 開始 -> 原画sz1Vtx[0].mi1Cap[i + 1] = liGVal[i];}fgets(lc1Buf, sizeof(lc1Buf), szpFpI);// 作画数 - 取得int liMCnt;fgets(lc1Buf, sizeof(lc1Buf), szpFpI);sscanf(lc1Buf, "%d", &liMCnt);// 頂点数siVCnt = liGCnt + liMCnt + 2;// 原画 -> 作画for (i = 0; i < liGCnt; i++) {for (j = 0; j < liMCnt; j++) {sz1Vtx[i + 1].mi1Cap[liGCnt + j + 1] = liGVal[i];}}// 作画 - 取得for (i = 0; i < liMCnt; i++) {int liMVal;fscanf(szpFpI, "%d", &liMVal);// 作画 -> 終了sz1Vtx[liGCnt + i + 1].mi1Cap[siVCnt - 1] = liMVal;}fgets(lc1Buf, sizeof(lc1Buf), szpFpI);// 合わない原画数 - 取得for (i = 0; i < liMCnt; i++) {int liNCnt;fscanf(szpFpI, "%d", &liNCnt);// 合わない原画 - 取得for (j = 0; j < liNCnt; j++) {int liNVal;fscanf(szpFpI, "%d", &liNVal);// 原画 -> 作画 - クリアsz1Vtx[liNVal].mi1Cap[liGCnt + i + 1] = 0;}fgets(lc1Buf, sizeof(lc1Buf), szpFpI);}// 最大流 - 取得int liMax = fGetMaxFlow(0, siVCnt - 1);// 結果 - セットif (liMax >= liCCnt) {sprintf(lc1Out, "SHIROBAKO\n");}else {sprintf(lc1Out, "BANSAKUTSUKITA\n");}// 結果 - 表示#ifdef D_TESTfgets(lc1Buf, sizeof(lc1Buf), szpFpA);if (strcmp(lc1Buf, lc1Out)) {siRes = -1;}#elseprintf("%s", lc1Out);#endif// 残データ有無#ifdef D_TESTlc1Buf[0] = '\0';fgets(lc1Buf, sizeof(lc1Buf), szpFpA);if (strcmp(lc1Buf, "")) {siRes = -1;}#endif// テストファイルクローズ#ifdef D_TESTfclose(szpFpI);fclose(szpFpA);#endif// テスト結果#ifdef D_TESTif (siRes == 0) {printf("OK %d\n", piTNo);}else {printf("NG %d\n", piTNo);}#endifreturn 0;}intmain(){#ifdef D_TESTint i;for (i = D_TEST_SNO; i <= D_TEST_ENO; i++) {fMain(i);}#elsefMain(0);#endifreturn 0;}