結果

問題 No.606 カラフルタイル
ユーザー asugen0402
提出日時 2019-04-19 13:56:50
言語 C
(gcc 13.3.0)
結果
AC  
実行時間 45 ms / 2,000 ms
コード長 4,056 bytes
コンパイル時間 1,306 ms
コンパイル使用メモリ 32,512 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-09-22 11:26:47
合計ジャッジ時間 2,562 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 25
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <float.h>
#include <limits.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//
#define D_SIZE_MAX 100000 //
#define D_COLOR_MAX 100000 //
#define D_WORK_MAX 100000 //
#define D_POS_CNT 2 //
#define D_POS_ROW 0 // -
#define D_POS_COL 1 // -
// -
typedef struct Work {
int miPos; // or
int miNo; // 0
int miColor; //
} Work;
// -
typedef struct Color {
int miColor; //
int miTCnt; //
} Color;
//
static FILE *szpFpI; //
static int siSize; //
static int siCCnt; //
static Work sz1Work[D_WORK_MAX]; //
static int siWCnt; //
static Color sz2FColor[D_POS_CNT][D_SIZE_MAX]; // [ or ][]
static int si1FCCnt[D_POS_CNT]; // [ or ]
static long long sl1CCnt[D_COLOR_MAX]; // []
// -
#ifdef D_TEST
static int siRes;
static FILE *szpFpA;
static int siTNo;
#endif
//
int
fOut(
char *pcpLine // <I>
)
{
char lc1Buf[1024];
#ifdef D_TEST
fgets(lc1Buf, sizeof(lc1Buf), szpFpA);
if (strcmp(lc1Buf, pcpLine)) {
siRes = -1;
}
#else
printf("%s", pcpLine);
#endif
return 0;
}
//
int
fMain(
)
{
int i, j;
char lc1Buf[1024];
// -
fgets(lc1Buf, sizeof(lc1Buf), szpFpI);
sscanf(lc1Buf, "%d%d%d", &siSize, &siCCnt, &siWCnt);
// -
for (i = 0; i < siWCnt; i++) {
char lcPos;
fgets(lc1Buf, sizeof(lc1Buf), szpFpI);
sscanf(lc1Buf, "%c%d%d", &lcPos, &sz1Work[i].miNo, &sz1Work[i].miColor);
if (lcPos == 'R') {
sz1Work[i].miPos = D_POS_ROW;
}
else {
sz1Work[i].miPos = D_POS_COL;
}
sz1Work[i].miNo--;
sz1Work[i].miColor--;
}
// -
for (i = siWCnt - 1; i >= 0; i--) {
//
Color *lzpColor = &sz2FColor[sz1Work[i].miPos][sz1Work[i].miNo];
if (lzpColor->miTCnt > 0) {
continue;
}
//
int liRev = !sz1Work[i].miPos;
// -
lzpColor->miColor = sz1Work[i].miColor; //
lzpColor->miTCnt = siSize - si1FCCnt[liRev]; //
si1FCCnt[sz1Work[i].miPos]++; //
}
// [] -
long long llTCnt = (long long)siSize * (long long)siSize;
for (i = 0; i < D_POS_CNT; i++) {
for (j = 0; j < siSize; j++) {
sl1CCnt[sz2FColor[i][j].miColor] += sz2FColor[i][j].miTCnt;
llTCnt -= sz2FColor[i][j].miTCnt;
}
}
sl1CCnt[0] += llTCnt;
//
for (i = 0; i < siCCnt; i++) {
sprintf(lc1Buf, "%lld\n", sl1CCnt[i]);
fOut(lc1Buf);
}
return 0;
}
//
int
fOne(
)
{
int liRet;
char lc1Buf[1024];
// -
memset(sz2FColor, 0, sizeof(sz2FColor)); // [ or ][]
memset(si1FCCnt, 0, sizeof(si1FCCnt)); // [ or ]
memset(sl1CCnt, 0, sizeof(sl1CCnt)); // []
// -
#ifdef D_TEST
sprintf(lc1Buf, ".\\Test\\T%d.txt", siTNo);
szpFpI = fopen(lc1Buf, "r");
sprintf(lc1Buf, ".\\Test\\A%d.txt", siTNo);
szpFpA = fopen(lc1Buf, "r");
siRes = 0;
#else
szpFpI = stdin;
#endif
//
liRet = fMain();
//
#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", siTNo);
}
else {
printf("NG %d\n", siTNo);
}
#endif
return 0;
}
//
int
main()
{
#ifdef D_TEST
int i;
for (i = D_TEST_SNO; i <= D_TEST_ENO; i++) {
siTNo = i;
fOne();
}
#else
fOne();
#endif
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0