zoukankan      html  css  js  c++  java
  • AGC 016C.+/- Rectangle(思路 构造)

    题目链接

    首先想到同样例1的构造方式。即不得不填负的格子填$-hw$,其余填$1$。直接这样能过二三十个点。 只这样不对。比如1 4 1 3,会输出无解(会填[1 1 -3 1])。怎么改呢。对于一个点,它可以覆盖多个$hw$的子矩形,只要对每个子矩形满足负权和,它们的和可以尽量大。 将原方案中的所有正数扩大$d$倍,不得不填负的格子只需恰好大于一个子矩形的和。这样多个格子加起来的和就大了。 如1 4 1 3,可以填[1000 1000 -2001 1000]。

    //20ms	1792KB
    #include <cstdio>
    #include <algorithm>
    const int N=505;
    
    bool A[N][N];
    
    int main()
    {
    	int H,W,h,w; scanf("%d%d%d%d",&H,&W,&h,&w);
    	if(!(H%h) && !(W%w)) return puts("No"),0;//每个子矩形都是负的,拼一块还是负的(当然不判也行) 
    
    	int r=h,c=w,tot=0;
    	while(1)
    	{
    		while(1)
    		{
    			++tot, A[r][c]=1;
    			if(c+w>W) break;
    			c+=w;//每次只能加w而不是2w-1!
    		}
    		c=w;
    		if(r+h>H) break;
    		r+=h;
    	}
    	int v=-h*w*1000+999;
    	if(-1ll*tot*v>=1000*(H*W-tot)) puts("No");
    	else
    	{
    		puts("Yes");
    		for(int i=1; i<=H; ++i,putchar('
    '))
    			for(int j=1; j<=W; ++j) printf("%d ",A[i][j]?v:1000);
    	}
    
    	return 0;
    }
    
  • 相关阅读:
    python-批量执行.py文件
    python-写入excel(xlswriter)
    python-读取excel(xlrd)
    python接口自动化测试-requests.post()
    python-读取配置文件
    python-mysql
    python-Redis的List操作
    python-Redis的String、Hash操作
    Elasitcsearch High Level Rest Client使用示例
    前端并发优化技巧
  • 原文地址:https://www.cnblogs.com/SovietPower/p/9708397.html
Copyright © 2011-2022 走看看