zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    浅析数据库安全技术
    本站快捷付款方式
    VMware Workstation 官方正式版及激活密钥
    Win10真正好用之处
    我眼中的CentOS 下 安全策略
    美团
    Tomcat connector元素常用配置(最大连接数等)
    9.22面经:
    9.7
    合并两个有序数组为一个新的有序数组
  • 原文地址:https://www.cnblogs.com/LiangYC1021/p/12741601.html
Copyright © 2011-2022 走看看