ごめんなさい。めんどくさいので原文参照でお願いします。
X1,Y1,size1(整数,整数,整数)
X2,Y2,size2(整数,整数,整数)
・
・
・
色の付いていないマスの個数(整数)
一番色の濃いマスの目の濃さ(整数)
2,5,3
3,6,1
3,4,2
4,5,2
3,6,3
2,4,1
77
5
まず、14*14のマップを作ります。そこに対して、入力の座標+2を基準にインクリメントをかけていきます。そのようにすると、はみ出す分を気にせず処理できます。後は、適切な範囲の結果を集計すれば終わりです。
ちなみに、インクリメントの操作は重なる部分があるのでまとめられる部分をまとめておきます。
#include <stdio.h> int main(){ char map[14][14]; int i,j; FILE *fp; int sum,max; for(i=0;i<14;i++){ for(j=0;j<14;j++){ map[i][j] =0; } } fp =fopen("030.dat","r"); while(!feof(fp)){ int x,y,m; fscanf(fp,"%d,%d,%d\n",&x,&y,&m); if(1 <= m){ map[y+2][x+2]++; map[y+3][x+2]++; map[y+2][x+3]++; map[y+1][x+2]++; map[y+2][x+1]++; } if(2 <= m){ map[y+1][x+1]++; map[y+1][x+3]++; map[y+3][x+1]++; map[y+3][x+3]++; } if(3 <= m){ map[y ][x+2]++; map[y+2][x ]++; map[y+4][x+2]++; map[y+2][x+4]++; } } sum = max = 0; for(i=2;i<12;i++){ for(j=2;j<12;j++){ if(map[i][j] ==0){ sum++; }else{ if(map[i][j] > max){ max = map[i][j]; } } } } printf("%d\n%d\n",sum,max); fclose(fp); return 0; }
これで予選問題は終わりです。難問か解けない問題もあったでしょうが数問であれば諦めても良いと思います。どうせ時間何全部は出来ないのでしょうから解ける問題をより素早く解けるようにすべきだと思います。まあ、後はあなた次第です。頑張って。