• CF w3d1 B. Marlin


    The city of Fishtopia can be imagined as a grid of 4 rows and an odd number of columns. It has two main villages; the first is located at the top-left cell (1,1), people who stay there love fishing at the Tuna pond at the bottom-right cell (4,n). The second village is located at (4,1) and its people love the Salmon pond at (1,n).

    The mayor of Fishtopia wants to place k hotels in the city, each one occupying one cell. To allow people to enter the city from anywhere, hotels should not be placed on the border cells.

    A person can move from one cell to another if those cells are not occupied by hotels and share a side.

    Can you help the mayor place the hotels in a way such that there are equal number of shortest paths from each village to its preferred pond?

    Input

    The first line of input contain two integers, n and k (3≤n≤99, 0≤k≤2×(n−2)), n is odd, the width of the city, and the number of hotels to be placed, respectively.

    Output

    Print "YES", if it is possible to place all the hotels in a way that satisfies the problem statement, otherwise print "NO".

    If it is possible, print an extra 4 lines that describe the city, each line should have n characters, each of which is "#" if that cell has a hotel on it, or "." if not.

    Examples

    inputCopy
    7 2
    outputCopy
    YES
    .......
    .#.....
    .#.....
    .......
    inputCopy
    5 3
    outputCopy
    YES
    .....
    .###.
    .....
    .....

    #include<bits/stdc++.h>
    using namespace std;
    int f[5][105],n,k;
    int main()
    {
    	cin>>n>>k;
    	cout<<"YES"<<endl;
    	if(k%2==0){
    		int cnt=0;
    		for(int i=2;cnt<k;i++,cnt+=2){
    			f[2][i]=1;
    			f[3][i]=1;
    		}
    	}
    	else if(k==1)f[2][n/2+1]=1;
    	else{
    		k--;
    		int mark=n/2+1,cnt=k;
    		f[2][mark]=1;
    		for(int i=1;mark-i>=2&&mark+i<=n-1;i++){
    			f[2][mark+i]=1;
    			f[2][mark-i]=1;
    			cnt-=2;
    			if(cnt==0)break;
    		}
    		if(cnt>0)for(int i=1;mark-i>=2&&mark+i<=n-1;i++){
    			f[3][mark+i]=1;
    			f[3][mark-i]=1;
    			cnt-=2;
    			if(cnt==0)break;
    		}
    	}
    	for(int i=1;i<=4;i++){
    		for(int j=1;j<=n;j++){
    			if(f[i][j])cout<<"#";
    			else cout<<".";
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    随机生成4位验证码(包含数字, 字母)
    eval注册和登录
    51单片机中断机制(定时器/计数器)
    CS106B
    机器学习算法之旅(转载)
    Ubuntu系统使用记录
    2. 自然语言处理预备知识
    1. 自然语言处理描述
    前端学习网站
    2016年总结,2017年计划
  • 原文地址:https://www.cnblogs.com/LiangYC1021/p/12741601.html
Copyright © 2020-2023  润新知