题意:
给你一个4*n的点阵,你要往其中刚好k个点上放上障碍物('#'),要求放完之后从点(1,1)到(4,n)的最短路数量和从点(4,1)到(1,n)的最短路数量仍然相同,其中n一定为奇数,障碍物不能放在最外围,如果没有满足条件的方法输出NO,否则输出任意一种
思路:
一定可以放,当k为偶数的时候从左往右两个两个放直到放完
当k为奇数的时候,先往最中间上方放一个,之后只要从左往右对称放就行了
拿AC代码运行一下一下就明白了
#include<stdio.h>
char str[6][108];
int main(void)
{
int n, k, i, j;
scanf("%d%d", &n, &k);
for(i=1;i<=4;i++)
{
for(j=1;j<=n;j++)
str[i][j] = '.';
}
if(k%2==0)
{
for(i=2;i<=n-1;i++)
{
if(k>=2)
{
k -= 2;
str[2][i] = str[3][i] = '#';
}
}
}
else
{
k--;
str[2][n/2+1] = '#';
for(i=n/2;i>=2;i--)
{
if(k>=2)
{
str[2][i] = str[2][n-i+1] = '#';
k -= 2;
}
}
for(i=2;i<=n/2;i++)
{
if(k>=2)
{
str[3][i] = str[3][n-i+1] = '#';
k -= 2;
}
}
}
printf("YES\n");
for(i=1;i<=4;i++)
{
for(j=1;j<=n;j++)
printf("%c", str[i][j]);
puts("");
}
return 0;
}