C - 菱形カウント / AtCoderBeginnerContest#018
#include <iostream> #include <string> using namespace std; int r, c, k; string s[500]; void check(int y, int x) { for (int i=0; i<k; ++i) for (int j=0; j<k-i; ++j) { if (0<=y+i && y+i<r) { if (0<=x+j && x+j<c && s[y+i][x+j]!='x') s[y+i][x+j]='*'; if (0<=x-j && x-j<c && s[y+i][x-j]!='x') s[y+i][x-j]='*'; } if (0<=y-i && y-i<r) { if (0<=x+j && x+j<c && s[y-i][x+j]!='x') s[y-i][x+j]='*'; if (0<=x-j && x-j<c && s[y-i][x-j]!='x') s[y-i][x-j]='*'; } } } void Solve(void) { int answer=0; for (int i=0; i<r; ++i) cin >> s[i]; for (int i=0; i<r; ++i) for (int j=0; j<c; ++j) if (s[i][j] == 'x') check(i,j); for (int i=0; i<r; ++i) for (int j=0; j<c; ++j) if (i<k-1 || r-k<i || j<k-1 || c-k<j) s[i][j]='x'; for (int i=0; i<r; ++i) for(int j=0; j<c; ++j) if (s[i][j] == 'o') ++answer; cout << answer << endl; } int main(void) { cin >> r >> c >> k; Solve(); return 0; }
作れない箇所を埋めていき、最終残った場所が菱形が作れる箇所なので足し上げ出力。
~了~