Submission #3601560
Source Code Expand
#include <limits.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// 内部定数
#define D_MARK_MAX 1000 // 最大マーク数
// 内部構造体 - マーク情報
typedef struct Mark {
int miRow, miCol; // 行・列
} Mark;
// 内部変数
static FILE *szpFpI; // 入力
static int siH, siW; // 高さ・幅
static Mark sz1Mark[D_MARK_MAX]; // マーク
static int siMCnt; // マーク数
static long long slCnt; // 本数
// 内部変数 - テスト用
#ifdef D_TEST
static int siRes;
static FILE *szpFpA;
#endif
// 本数 - 減算
int
fDelCnt(
int piRow // <I> 行
, int piCol // <I> 列
)
{
int i;
// 範囲チェック
if (piRow < 1 || siH < piRow) {
return 0;
}
if (piCol < 1 || siW < piCol) {
return 0;
}
// マーク - 検索
for (i = 0; i < siMCnt; i++) {
if (sz1Mark[i].miRow == piRow) {
if (sz1Mark[i].miCol == piCol) {
return 0;
}
}
}
// 本数 - 減算
slCnt--;
return 0;
}
// 実行メイン
int
fMain(
int piTNo // <I> テスト番号 1~
)
{
int i;
char lc1Buf[1024], lc1Out[1024];
// データ - 初期化
siMCnt = 0; // マーク数
// 入力 - セット
#ifdef D_TEST
sprintf(lc1Buf, ".\\Test\\T%d.txt", piTNo);
szpFpI = fopen(lc1Buf, "r");
sprintf(lc1Buf, ".\\Test\\A%d.txt", piTNo);
szpFpA = fopen(lc1Buf, "r");
siRes = 0;
#else
szpFpI = stdin;
#endif
// 高さ・幅・マーク数 - 取得
int liMark;
fgets(lc1Buf, sizeof(lc1Buf), szpFpI);
sscanf(lc1Buf, "%d%d%d", &siH, &siW, &liMark);
// 最大本数
slCnt = (long long)(siH - 1) * (long long)siW + (long long)(siW - 1) * (long long)siH;
// マーク - 取得
for (i = 0; i < liMark; i++) {
fgets(lc1Buf, sizeof(lc1Buf), szpFpI);
sscanf(lc1Buf, "%d%d", &sz1Mark[siMCnt].miRow, &sz1Mark[siMCnt].miCol);
// 上下左右を削除
fDelCnt(sz1Mark[siMCnt].miRow + 1, sz1Mark[siMCnt].miCol);
fDelCnt(sz1Mark[siMCnt].miRow - 1, sz1Mark[siMCnt].miCol);
fDelCnt(sz1Mark[siMCnt].miRow, sz1Mark[siMCnt].miCol + 1);
fDelCnt(sz1Mark[siMCnt].miRow, sz1Mark[siMCnt].miCol - 1);
// マーク数
siMCnt++;
}
// 結果 - セット
sprintf(lc1Out, "%lld\n", slCnt);
// 結果 - 表示
#ifdef D_TEST
fgets(lc1Buf, sizeof(lc1Buf), szpFpA);
if (strcmp(lc1Buf, lc1Out)) {
siRes = -1;
}
#else
printf("%s", lc1Out);
#endif
// 残データ有無
#ifdef D_TEST
lc1Buf[0] = '\0';
fgets(lc1Buf, sizeof(lc1Buf), szpFpA);
if (strcmp(lc1Buf, "")) {
siRes = -1;
}
#endif
// テストファイルクローズ
#ifdef D_TEST
fclose(szpFpI);
fclose(szpFpA);
#endif
// テスト結果
#ifdef D_TEST
if (siRes == 0) {
printf("OK %d\n", piTNo);
}
else {
printf("NG %d\n", piTNo);
}
#endif
return 0;
}
int
main()
{
#ifdef D_TEST
int i;
for (i = D_TEST_SNO; i <= D_TEST_ENO; i++) {
fMain(i);
}
#else
fMain(0);
#endif
return 0;
}
Submission Info
Submission Time
2018-11-15 10:34:19+0900
Task
B - 格子グラフ
User
asugen0402
Language
C (GCC 5.4.1)
Score
300
Code Size
3105 Byte
Status
AC
Exec Time
2 ms
Memory
128 KB
Compile Error
./Main.c: In function ‘fMain’:
./Main.c:86:2: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(lc1Buf, sizeof(lc1Buf), szpFpI);
^
./Main.c:94:3: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(lc1Buf, sizeof(lc1Buf), szpFpI);
^
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
300 / 300
Status
Set Name
Test Cases
Sample
00_sample_00, 00_sample_01, 00_sample_02
All
00_sample_00, 00_sample_01, 00_sample_02, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28
Case Name
Status
Exec Time
Memory
00_sample_00
AC
1 ms
128 KB
00_sample_01
AC
1 ms
128 KB
00_sample_02
AC
1 ms
128 KB
in01
AC
1 ms
128 KB
in02
AC
1 ms
128 KB
in03
AC
1 ms
128 KB
in04
AC
1 ms
128 KB
in05
AC
1 ms
128 KB
in06
AC
1 ms
128 KB
in07
AC
1 ms
128 KB
in08
AC
1 ms
128 KB
in09
AC
1 ms
128 KB
in10
AC
1 ms
128 KB
in11
AC
1 ms
128 KB
in12
AC
1 ms
128 KB
in13
AC
1 ms
128 KB
in14
AC
1 ms
128 KB
in15
AC
1 ms
128 KB
in16
AC
1 ms
128 KB
in17
AC
1 ms
128 KB
in18
AC
1 ms
128 KB
in19
AC
1 ms
128 KB
in20
AC
1 ms
128 KB
in21
AC
1 ms
128 KB
in22
AC
2 ms
128 KB
in23
AC
2 ms
128 KB
in24
AC
1 ms
128 KB
in25
AC
2 ms
128 KB
in26
AC
1 ms
128 KB
in27
AC
1 ms
128 KB
in28
AC
1 ms
128 KB