fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 21530 (C++) Города
최초 업로드: 2025-08-06 12:52:58
최근 수정 시간: 2025-08-06 12:53:39
게시자: rlatjwls3333
카테고리: 백준
조회수: 5
# [Bronze I] Города [문제 링크](https://www.acmicpc.net/problem/21530) ## 문제 설명 <p>Юный программист решил придумать собственную игру. Игра происходит на поле размером N × N клеток, в некоторых клетках которого расположены города (каждый город занимает одну клетку; в каждой клетке может располагаться не более одного города). Всего должно быть чётное количество городов.</p> <p>Изначально про каждую клетку игрового поля известно, расположен ли в ней город или нет. Чтобы начать игру, необходимо разделить игровое поле на два государства так, чтобы в каждом государстве было поровну клеток-городов.</p> <p>Граница между государствами должна проходить по границам клеток таким образом, чтобы из любой клетки каждого государства существовал путь по клеткам этого же государства в любую другую его клетку (из клетки можно перейти в соседнюю, если они имеют общую сторону). Каждая клетка игрового поля должна принадлежать только одному из двух государств, при этом государства не обязаны состоять из одинакового количества клеток.</p> <p>Требуется написать программу, которая с учетом сказанного разделит клетки заданного игрового поля между двумя государствами. </p> ## 입력 <p>Первая строка входного файла содержит одно целое положительное число N, задающее размер игрового поля (1 ≤ N ≤ 50).</p> <p>Последующие N строк содержат по N заглавных латинских букв (без пробелов), кодирующих соответствующие клетки игрового поля: ‘C’ обозначает клетку, занятую городом, ‘D’ – пустую клетку. Гарантируется, что на поле есть хотя бы два города и всего их четное число. </p> ## 출력 <p>Выходной файл должен содержать N строк по N цифр (без пробелов) в каждой, кодирующих соответствующие клетки. Цифра 1 обозначает, что данная клетка принадлежит первому государству, цифра 2 – данная клетка принадлежит второму государству.</p> <p>Если решений несколько, необходимо вывести любое из них. </p> ## 풀이 #### C의 총 개수를 세고, C가 절반 이하인 동안은 1을, 나머지는 2를 출력하면 된다. ``` c++ #include<bits/stdc++.h> using namespace std; string s[50]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int total=0; for(int i=0;i<n;i++) { cin >> s[i]; for(int j=0;j<n;j++) { if(s[i][j]=='C') total++; } } int cnt=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(cnt<total/2) { if(s[i][j]=='C') cnt++; cout << 1; } else { cout << 2; } } cout << '\n'; } } ```