• 题解 P7886 「MCOI-06」Gerrymandering


    [ ext{题目大意} ]

    (quad)要求用大小为 (k) 的连通块铺满 (n imes m) 的矩形。

    [ ext{思路} ]

    (quad)这是一道构造题,一开始我的想法是dfs,优先走边界,就是走螺旋形,虽然过了此题,但还是花了不少时间。

    (quad)现在一看,直接走蛇形不就好了吗?

    如图

    (quad)这样只需要根据行的奇偶性,判断从左开始还是从右开始铺即可。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #define re register int
    #define il inline
    using namespace std;
    il int read()
    {
      int x=0,f=1;char ch=getchar();
      while(!isdigit(ch)&&ch!='-')ch=getchar();
      if(ch=='-')f=-1,ch=getchar();
      while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
      return x*f;
    }
    il void print(int x)
    {
      if(x<0)putchar('-'),x=-x;
      if(x/10)print(x/10);
      putchar(x%10+'0');
    }
    const int N=1e6+5;
    int T,n,m,k,a[N],cnt,num;
    signed main()
    {
    	T=read();
    	while(T--){
    		n=read();m=read();k=read();
    		if(n*m%k){puts("NO");continue;}
    		cnt=1;num=0;puts("YES");
    		for(re i=1;i<=n;i++)
    		{
    			if(i&1){
    				for(re j=1;j<=m;j++)
    				{
    					if(num==k)num=0,cnt++;
    					a[j]=cnt;num++;
    				}
    			}
    			else {
    				for(re j=m;j>=1;j--)
    				{
    					if(num==k)num=0,cnt++;
    					a[j]=cnt;num++;
    				}
    			}
    			for(re j=1;j<=m;j++)print(a[j]),putchar(' ');
    			putchar('
    ');
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    IntelliJ IDEA 2017版 SpringBoot的核心配置详解
    路由追踪程序traceroute/tracert分析与科普
    traceroute追踪路由命令
    ping 命令
    hostname命令,修改主机名及host文件
    net-tools工具arp命令
    ifup 和 ifdown
    net-tools工具ifconfig 命令
    iproute2 对决 net-tools
    什么是带内管理 带外管理
  • 原文地址:https://www.cnblogs.com/FarkasW/p/15463180.html
Copyright © 2020-2023  润新知