这个题,如果 N ∗ M N * M N∗M 是偶数的话,那么答案一定是 N ∗ M / 2 N * M / 2 N∗M/2 的呀,如果是奇数,就是 N ∗ M / 2 − 1 N * M / 2 - 1 N∗M/2−1。当然考虑到 C++ 的除法是整除,因此直接输出 N ∗ M / 2 N * M / 2 N∗M/2 就行,如果是 python的话,输出 N ∗ M / / 2 N * M // 2 N∗M//2.
#include<iostream>usingnamespace std;int M, N;intmain(){
cin >> M >> N;
cout << M * N /2<< endl;return0;}
#include<cstdio>intmain(){
int n;scanf("%d",&n);if(n %2){
n /=2;printf("%d\n", n);for(int i =0; i +1< n; i++){
printf("%d ",2);}printf("%d\n",3);}else{
n /=2;printf("%d\n", n);for(int i =0; i < n; i++){
printf("%d%c",2, i +1== n ?'\n':' ');}}return0;}
#include<cstdio>#include<algorithm>usingnamespace std;int a[100005], ans[100005];intmain(){
int N;scanf("%d",&N);for(int i =0; i < N; i++){
scanf("%d",&a[i]);}sort(a, a + N);int p1 =0, p2 = N -1;int i =0;while(i < N){
ans[p1++]= a[i++];if(i < N) ans[p2--]= a[i++];}bool flag =true;for(int i =0; i < N; i++){
if(ans[i]>= ans[(i + N -1)% N]+ ans[(i +1)% N]){
flag =false;break;}}if(flag){
printf("YES\n");for(int i =0; i < N; i++){
printf("%d%c", ans[i], i +1== N ?'\n':' ');}}else{
printf("NO\n");}return0;}
这是一道很有意思的构造题,假设空地的数量是 cnt 个,需要摆的墙是 K 个,那么,先从一个空地开始走 cnt - K 个空格,然后把剩下的 K 个摆上墙,这样子就可以保证剩下的 cnt - K 个空格是连通的。
#include<cstdio>#include<cstring>#include<algorithm>usingnamespace std;int N, M, K;constint maxn =510;char maze[maxn][maxn];int dx[]={
1,-1,0,0}, dy[]={
0,0,1,-1};int cnt, blank;voiddfs(int x,int y){
maze[x][y]='*';for(int i =0; i <4; i++){
int nx = x + dx[i], ny = y + dy[i];if(nx <0|| nx >= N || ny <0|| ny >= M || maze[nx][ny]!='.')continue;if(++blank <= cnt - K)dfs(nx, ny);}}intmain(){
scanf("%d%d%d",&N,&M,&K);for(int i =0; i < N; i++){
scanf("%s", maze[i]);}for(int i =0; i < N; i++){
for(int j =0; j < M; j++){
if(maze[i][j]=='.') cnt++;}}bool flag =false;for(int i =0; i < N; i++){
for(int j =0; j < M; j++){
if(maze[i][j]=='.'&&++blank <= cnt - K){
dfs(i, j);
flag =true;break;}}if(flag)break;}for(int i =0; i < N; i++){
for(int j =0; j < M; j++){
if(maze[i][j]=='*') maze[i][j]='.';elseif(maze[i][j]=='.') maze[i][j]='X';}}for(int i =0; i < N; i++)printf("%s\n", maze[i]);return0;}