zoukankan      html  css  js  c++  java
  • 【构造】Codeforces Round #480 (Div. 2) B. Marlin

    题意:给你一个4*n的网格,保证n为奇数,让你在其中放k个障碍物,不能放在边界的格子上,使得从左上角走到右下角的最短路的方案数,恰好等于从左下角走到右上角的最短路的方案数。

    k为偶数时,以纵向为对称轴进行摆放即可。

    k为奇数且小于等于n-2时,如下图横向对称摆放:

    ...........
    ...........
    ...#####...
    ...........

    k等于n时,如下图:

    .............
    .#.........#.
    .###########.
    .............

    k大于n时,在上图空闲的位置随便填即可。

    #include<cstdio>
    using namespace std;
    int n,K;
    char a[6][105];
    int main(){
    	scanf("%d%d",&n,&K);
    	for(int i=1;i<=4;++i){
    		for(int j=1;j<=n;++j){
    			a[i][j]='.';
    		}
    	}
    	puts("YES");
    	if(K%2==0){
    		K/=2;
    		for(int i=1;i<=K;++i){
    			a[2][i+1]=a[3][i+1]='#';
    		}
    	}
    	else{
    		if(n==1){
    			a[2][2]='#';
    		}
    		else if(K<=n-2){
    			for(int i=1,j=(n-K)/2+1;i<=K;++i,++j){
    				a[3][j]='#';
    			}
    		}
    		else if(K==n){
    			for(int i=1,j=2;i<=n-2;++i,++j){
    				a[3][j]='#';
    			}
    			a[2][2]=a[2][n-1]='#';
    		}
    		else{
    			for(int i=1,j=2;i<=n-2;++i,++j){
    				a[3][j]='#';
    			}
    			a[2][2]=a[2][n-1]='#';
    			for(int i=3,j=1;i<=n-2 && j<=K-n;++i,++j){
    				a[2][i]='#';
    			}
    		}
    	}
    	for(int i=1;i<=4;++i){
    		for(int j=1;j<=n;++j){
    			putchar(a[i][j]);
    		}
    		puts("");
    	}
    	return 0;
    }
  • 相关阅读:
    socket 常用api
    socket客户端小例
    select和ioctl的一个简单测试
    git 相关配置
    pvr转png
    flash 中matrix
    moto x使用注意事项
    互联网思维将颠覆我们的认知
    微信公众账号怎么快速增加粉丝
    Discuz如何解除某个会员的QQ绑定状态
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/9013375.html
Copyright © 2011-2022 走看看