#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,k;
cin>>n>>m>>k;
if(k==m*n-1){
cout<<"IMPOSSIBLE";
return 0;
}
char a[n][m];
for(int i = 0; i<n; i++){
for(int j = 0; j<m; j++){
if(k>0){
a[i][j]='U';
k--;
cout<<'U';
} else if((a[i-1][j]=='U' || i==0) && i==n-1 && j!=m-1){
cout<<'R';
} else if((a[i-1][j]=='U' || i==0) && i==n-1 && j==m-1){
a[i][j] = 'L';
cout<<'L';
} else if(i==n-1 && a[i-1][j]!='U') {
cout<<'U';
} else {
cout<<'D';
}
}
cout<<endl;
}
return 0;
}
Объяснение
код написан на языке с++;
есть 5 случаев которые приведены в картинках ниже + случай когда n*m-1=k выводит Impossible
Поделитесь своими знаниями, ответьте на вопрос:
1)Значення яких властивостей фігури визначають вигляд її контура та внутрішньої області? 2)Значення якої властивості фігури визначають її форму?Яких значень вона може набувти умоляю очень
Очевидно, решения нет, если нужно выпустить ровно K = NM - 1 человека: он должен перейти в какую-то комнату, но из всех комнат, кроме его, есть путь наружу.
При всех остальных K можно, например, поступить так:
- отсчитать сверху и слева направо K комнат, в них открыть дверь вверх
- в оставшихся комнатах, не находящихся в нижнем ряду, открыть путь вниз
- в оставшихся комнатах нижнего ряда, кроме правого нижнего угла, открыть дверь вправо
- в правом нижнем углу, если там ещё не открыта дверь, открыть дверь влево
В итоге K человек уйдут с территории через верх, а остальные будут бесконечно ходить между двумя комнатами в правом нижнем углу.
Код (python 3):
N, M, K = map(int, input().split())
if K == N * M - 1:
print("IMPOSSIBLE")
elif K == N * M:
for _ in range(N):
print("U" * M)
else:
for _ in range(K // M):
print("U" * M)
if K // M < N - 1:
print("U" * (K % M) + "D" * (M - K % M))
for __ in range(N - 1 - K // M):
print("D" * M)
print("R" * (M - 1) + "L")
else:
print("U" * (K % M) + "R" * (M - K % M - 1) + "L")